হাইবারনেশন ব্যবহার systemctl
এবং এটি কঠিন ক্ষেত্রে কাজ করা
আমার জন্য, pm-hibernate
সর্বদা ব্যর্থ। কিছু টুইটের পরে, আমি সিস্টেমডের ইন্টারফেসটি ব্যবহার করে (16.04 এবং তারপরের দিকে init সিস্টেম) হাইবারনেট করতে সক্ষম হয়েছি। আমি এটিকে অদলবদলের ফাইলের সাহায্যে 17.04 এ কাজ করতে সক্ষম হয়েছি। এই কেস স্টাডি সমস্যাযুক্ত অন্যদের জন্য উপকারী হতে পারে।
প্রথম চেষ্টা:
sudo systemctl hibernate
যদি এটি ব্যর্থ হয়, সমস্যা সমাধান শুরু করুন: হাইবারনেট স্টেটে (এইচটিডি বা এসিপিআই এস 4) মেশিনের স্টেটটি ডিস্কে লিখিত হয় যাতে এটি সংরক্ষণের জন্য কোনও পাওয়ার প্রয়োজন হয় না। রাজ্যটি হয় অদলবদল বিভাজনে বা একটি অদলবদলে লেখা হয়। দ্রষ্টব্য: বিটিআরএফএস ব্যবহার করে যদি অদলবদল ব্যবহার করার চেষ্টা করবেন না কারণ এটি ফাইল সিস্টেমের দুর্নীতির কারণ হতে পারে
হাইবারনেশনের জন্য আপনার অদলবদল বা অদলবদলের ফাইলটি র্যামের মতো একই আকারের হতে পারে তবে আর্ক উইকি পৃষ্ঠা অনুসারে র্যামের আকার যদি কমপক্ষে 2/5 হয় তবে আপনি হাইবারনেট করতে সক্ষম হবেন এমন একটি ভাল সম্ভাবনা রয়েছে there , তাই অদলবদলের আকার বাড়ানোর আগে অন্যান্য পদক্ষেপগুলি চেষ্টা করে দেখুন।
যদি আপনার সমস্যাটি হয় যে আপনি প্রত্যাশিত পুনঃসূচনাটির পরিবর্তে একটি পরিষ্কার বুট পান তবে কমপক্ষে ডিস্কের চিত্রটি খুঁজে পেতে আপনার একটি বুট প্যারামিটার স্থাপন করা উচিত most
আপনার সোয়াপ পার্টিশনটি সন্ধান করুন:
grep swap /etc/fstab
আমার জন্য এই রিটার্ন (আংশিক আউটপুট)
# swap was on /dev/mmcblk0p3 during installation
/dev/mmcblk0p3
পার্টিশন নির্দিষ্ট করার জন্য কোথায়
একটি বুট প্যারামিটার যুক্ত করুন:
sudoedit /etc/default/grub
প্রারম্ভিক লাইনে উদ্ধৃতিতে বিভাগটি GRUB_CMDLINE_LINUX_DEFAULT
যুক্ত করুন resume=/dev/YourSwapPartition
(আপনি যে পার্টিশনটি আগে চিহ্নিত করেছেন তা প্রতিস্থাপন করুন)। আমার উদাহরণ ব্যবহার করে:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=/dev/mmcblk0p3"
আপনি যে কোনও সময় এই ফাইলটি পরিবর্তন করবেন, আপনার অবশ্যই চলতে হবে sudo update-grub
বা পরিবর্তনের কোনও প্রভাব থাকবে না।
এখন আপনাকে পুনরায় বুট করতে হবে। তারপরে আপনি কমান্ড জারি করে হাইবারনেট করার চেষ্টা করতে পারেন:
sudo systemctl hibernate
পুনরায় শুরু করতে, পাওয়ার বোতাম টিপুন এবং সিস্টেমটি বুট হবে।
আপনার যদি এখনও সমস্যা হয় তবে ডিবাগিং শুরু করুন।
আমি একটি উদাহরণ হিসাবে নিচে আমার ক্ষেত্রে কিন্তু এস রাজ্যের ডিবাগ খুঁজে পাওয়া যেতে পারে বিস্তারিত তথ্য অন্তর্ভুক্ত এই ব্লগে এবং এই এক ।
আরও তথ্য ক্যাপচার করতে আরও কিছু বুট প্যারামিটার সেট করুন। সরান quiet
এবং splash
যোগ করুন initcall_debug
এবং no_console_suspend
যার ফলে ডিআই সিস্টেমের কলগুলি কনসোলে মুদ্রিত হবে যার ফলে আপনি কী ভুল হচ্ছে তা দেখতে পারেন। আমি এটি সেট:
GRUB_CMDLINE_LINUX_DEFAULT="resume=/dev/mmcblk0p3 no_console_suspend initcall_debug"
হাইবারনেশন থেকে পুনরায় শুরু করার সময় কী ভুল হচ্ছে তা আমাকে সাহায্য করেছিল।
আমার ক্ষেত্রে, জীবনবৃত্তান্তের পরে আমি ওয়াইফাই হারিয়েছি, এবং কর্নেল স্পষ্টভাবে বিচলিত হয়েছিল বেশিরভাগ কমান্ড হিসাবে (উদাহরণস্বরূপ /sys
মডিউলগুলি পুনরায় লোড করা বা কোনও systemctl
কমান্ড থেকে কিছু পড়া ) কাজ করবে না - প্রক্রিয়াটি প্রদর্শিত হবে এবং কেবল স্তব্ধ হয়ে যাবে (এই সমস্ত কিছু হবে অবশ্যই পুনরায় বুট করার পরে স্বাভাবিক অবস্থায় ফিরে এসেছিল)। খুব ধীরে ধীরে সিস্টেমটি বন্ধ হয়ে যাওয়া এবং সমস্ত ডিবাগ বার্তা পড়তে দেখে আমি লক্ষ্য করেছি যে "বিআরসিএম" নিয়ে প্রচুর সমস্যা হয়েছে, তাই আমি অনুমান করেছি যে আমার ব্রডকমের বেতার ড্রাইভার মডিউলটি দোষী। অবশ্যই নিশ্চিত যে আমি প্রথমে মডিউলটি আনলোড করার জন্য আমার হাইবারনেশন পদ্ধতিটি সামঞ্জস্য করেছি:
sudo modprobe -r brcmfmac
sudo systemctl hibernate
পুনরায় শুরুতে আমি মডিউলটি পুনরায় লিখি
sudo modprobe brcmfmac
এবং সবকিছু নিখুঁতভাবে কাজ করে। আমাকে মডিউলটিকেও ব্ল্যাকলিস্ট btsdio
করতে হবে যা মনে হয় না এটি বেমানানbrcmfmac
আপডেট: হাইবারনেশন 17.04-তে একটি অদলবদল ফাইল ব্যবহার করে।
আবার আর্ক উইকি পৃষ্ঠার সাহায্যে এবং কিছু অতিরিক্ত টিঙ্কারিংয়ের সাহায্যে আমি অদলবদল ফাইল দিয়ে 17.04-এ কাজ করার জন্য হাইবারনেশনটি পরিচালনা করতে সক্ষম হয়েছি। এটির জন্য একটি অতিরিক্ত বুট প্যারামিটার প্রয়োজন, resume_offset=n
যেখানে এন প্রথম physical_offset
ফলাফলের আউটপুটে রয়েছে sudo filefrag -v /swapfile
:
$ sudo filefrag -v /swapfile
Filesystem type is: ef53
File size of /swapfile is 1425873920 (348114 blocks of 4096 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 32767: 34816.. 67583: 32768:
1: 32768.. 63487: 67584.. 98303: 30720:
....
সুতরাং, আমার ক্ষেত্রে অতিরিক্ত বুট প্যারামিটারটি resume_offset=34816
। পার্টিশনটি আবার শুরু করার জন্য আপনাকে বুট পরামিতি নির্ধারণ করতে হবে set এটি হ'ল মূল বিভাজন (বা যে কোনও পার্টিশনের উপর ভিত্তি করে আপনার সোয়াপ ফাইলটি থাকবে) আমার পরামিতিগুলি এখন:
GRUB_CMDLINE_LINUX_DEFAULT="no_console_suspend initcall_debug resume=/dev/mmcblk1p2 resume_offset=34816"
/dev/mmcblk1p2
আমার মূল বিভাজনটি কোথায় (আপনার মতো কিছু হওয়ার সম্ভাবনা বেশি /dev/sda2
)।
রেজিউমের সময় আমি ইমেজটি সাফল্যের সাথে লোড করতে দেখেছি, তবে আমার ক্ষেত্রে (কেবল উদাহরণ - ওয়াইএমএমভিএপিডি) তারপরে আরও কিছু ড্রাইভার ( i2c_designware
) কিছু ত্রুটি ফেলেছিল এবং আমি পুনরায় জীবনবৃত্তিতে একটি সম্পূর্ণ সিস্টেম ফ্রিজ পেয়েছি। হাইবারনেশন কাজ করে যদি আমি সেইগুলি ছাড়াও এই মডিউলগুলি আনলোড করি brcmfmac
তবে সিস্টেমগুলি মডিউলগুলি ছাড়াই দ্রুত অকেজো হয়ে যায়। আমি বগী মডিউলগুলি আনলোড এবং তত্ক্ষণাত পুনরায় শুরুতে পুনরায় লাগাতে এক ধরণের স্ক্রিপ্ট তৈরি করেছি:
# remove buggy modules
modprobe -r brcmfmac i2c_designware_platform i2c_designware_core &&
# hibernate
echo disk > /sys/power/state
# reinsert
modprobe i2c_designware_core i2c_designware_platform brcmfmac
যখন হাইবারনেট করতে চাই, তখন আমি দৌড়ে যাই sudo bash script
। এটি দুর্দান্ত কাজ করে।
টি এল; ডিআর
সিস্টেমেড ব্যবহার করুন, অদলবদল থেকে পুনরায় শুরু করার জন্য একটি বুট প্যারামিটার সেট করুন, বগি ড্রাইভারগুলি সনাক্ত করুন এবং হাইবারনেশন শুরু করার আগে এগুলি আনলোড করুন। যদি এই মডিউলগুলি ব্যতীত সিস্টেম দীর্ঘক্ষণ কাজ করতে না পারে বা আপনাকে বেশ কয়েকটি আনলোড করা প্রয়োজন, তবে হাইবারনেশন শুরু করার জন্য একটি সাধারণ স্ক্রিপ্ট ব্যবহার করা আরও সহজ হতে পারে।