গ্রাব মেনু ছেড়ে যাওয়ার সময় এবং উবুন্টু স্প্ল্যাশ স্ক্রিনের আগে এই বার্তাটি ঘটে।
বার্তাটি সাফ করতে আমি কীভাবে সমস্যাটি সমাধান করব?
আর এর অর্থ কি?
error: Diskfilter writes are not supported
সিস্টেম বুট করে এবং ঠিক ঠিক কাজ করে বলে মনে হচ্ছে।
গ্রাব মেনু ছেড়ে যাওয়ার সময় এবং উবুন্টু স্প্ল্যাশ স্ক্রিনের আগে এই বার্তাটি ঘটে।
বার্তাটি সাফ করতে আমি কীভাবে সমস্যাটি সমাধান করব?
আর এর অর্থ কি?
error: Diskfilter writes are not supported
সিস্টেম বুট করে এবং ঠিক ঠিক কাজ করে বলে মনে হচ্ছে।
উত্তর:
এটি একটি বাগ যা উবুন্টু সার্ভার এলটিএস (উবুন্টু সার্ভার 14.04 এলটিএস) এর সাম্প্রতিকতম সংস্করণে ঘটে যখন আপনি কোনও এলভিএম বা একটি RAID পার্টিশনের অভ্যন্তরে বুট পার্টিশন তৈরি করেন (বা রুট পার্টিশন উপস্থিত থাকে না) ।
আপনি উবুন্টু লঞ্চপ্যাডে এই ত্রুটি সম্পর্কে আরও তথ্য পেতে পারেন: বাগ # 1274320 "ত্রুটি: ডিস্কফিল্টার রাইটস সমর্থিত নয়" ।
আপডেট: এই বাগটি ইতিমধ্যে উবুন্টু সার্ভার 14.04 এবং কিছু নতুন উবুন্টু সংস্করণে স্থির করা হয়েছে। সম্ভবত, আপনার কেবল চালানো দরকার apt-get upgrade
।
সিস্টেম বুট করার সময়, GRUB এতে ( load_env
) ডেটা পড়ে /boot/grub/grubenv
। এই ফাইলটিকে GRUB পরিবেশ ব্লক বলা হয় ।
GRUB ম্যানুয়াল থেকে:
এক বুট থেকে পরের বারের জন্য অল্প পরিমাণে তথ্য মনে রাখতে সক্ষম হয়ে ওঠা প্রায়শই দরকারী।
[...]
বুট করার সময়, লোড_এএনভি কমান্ড (দেখুন লোড_এনভি) এটি থেকে পরিবেশের ভেরিয়েবল লোড করে, এবং save_env (দেখুন save_env) কমান্ড এতে পরিবেশের ভেরিয়েবল সংরক্ষণ করে।
[...]
grub-mkconfig
বাস্তবায়নের জন্য এই সুবিধাটি ব্যবহার করেGRUB_SAVEDEFAULT
এই আচরণটি প্রতিষ্ঠিত হতে পারে /etc/grub.d/00_header
( update-grub
ফাইলটি তৈরি করতে এই ফাইলটি ব্যবহার করে /boot/grub/grub.cfg
):
if [ -s $prefix/grubenv ]; then
set have_grubenv=true
load_env
fi
সমস্যাটি হ'ল save_env
বিবৃতিটি কেবল সাধারণ ইনস্টলেশনগুলিতে কাজ করে (আপনি save_env
কোনও RAID বা LVM ডিস্কের মধ্যে চলতে পারবেন না )। GRUB ম্যানুয়াল থেকে:
সুরক্ষার কারণে, কেবলমাত্র প্লেইন ডিস্কে (কোনও এলভিএম বা RAID নেই) ইনস্টল করা, নন-চেকসামিং ফাইল সিস্টেম (কোনও জেডএফএস নয়) এবং বিআইওএস বা ইএফআই ফাংশন (কোনও এটিএ, ইউএসবি বা আইইইই 1275 নয়) ব্যবহার করে এই স্টোরেজটি উপলব্ধ।
GRUB রেকর্ডফেইল বৈশিষ্ট্যটি save_env
রেকর্ডফেল অবস্থা আপডেট করতে বিবৃতিটি ব্যবহার করে (দেখুন উবুন্টু সহায়তা - গ্রুব 2 , "শেষ বুট ব্যর্থ হয়েছে বা পুনরুদ্ধার মোডে বুট করুন" বিভাগ)। তবে উবুন্টু ১৪.০৪-এ (এবং সাম্প্রতিক ডেবিয়ান সংস্করণগুলিতে) save_env
স্টেটমেন্টটি (রেকর্ডফেল বৈশিষ্ট্যের অভ্যন্তরে) ব্যবহৃত হয় এমনকি গ্রাবি একটি এলভিএম বা একটি রেড ইনস্টল করা থাকলেও।
আসুন 104 থেকে 124 এ পর্যন্ত লাইনগুলি দেখুন /etc/grub.d/00_header
:
if [ "$quick_boot" = 1 ]; then
[...]
case "$FS" in
btrfs | cpiofs | newc | odc | romfs | squash4 | tarfs | zfs)
cat <<EOF
# GRUB lacks write support for $FS, so recordfail support is disabled.
[...]
if [ -n "\${have_grubenv}" ]; then if [ -z "\${boot_once}" ]; then save_env recordfail; fi; fi
অসমর্থিত ফাইল সিস্টেম (বিটিআরএফএস, জেডএফএস, ইত্যাদি) ব্যবহার করার সময় GRUB সঠিকভাবে রেকর্ডফেল বৈশিষ্ট্যটি এড়িয়ে যায়, তবে এটি কোনও মুহুর্তে LVM এবং RAID এড়িয়ে যায় না ।
একটি ফাইল সিস্টেমে সঠিকভাবে পড়তে / লিখতে, GRUB একটি উপযুক্ত মডিউল লোড করে।
GRUB RAID পার্টিশনে ডিস্কফিল্টার মডিউল ( insmod diskfilter
), এবং LVM পার্টিশনে lvm মডিউল ব্যবহার করে।
আসুন ডিস্কফিল্টার মডিউলটির পড়ুন / লেখার বাস্তবায়নটি দেখুন :
apt-get source grub2
vim grub2-2.02~beta2/grub-core/disk/diskfilter.c
আমি এখানে কোডটি আটকে দিচ্ছি (808 থেকে 823 পর্যন্ত লাইন)। এই প্রশ্নে দেখানো সতর্কতাটি 821 লাইনে প্রদর্শিত হবে:
static grub_err_t
grub_diskfilter_read (grub_disk_t disk, grub_disk_addr_t sector,
grub_size_t size, char *buf)
{
return read_lv (disk->data, sector, size, buf);
}
static grub_err_t
grub_diskfilter_write (grub_disk_t disk __attribute ((unused)),
grub_disk_addr_t sector __attribute ((unused)),
grub_size_t size __attribute ((unused)),
const char *buf __attribute ((unused)))
{
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
"diskfilter writes are not supported");
}
grub_diskfilter_read
ফাংশন বাস্তবায়িত হয় (এবং GRUB- র RAID- র ফাইল সিস্টেম পড়তে পারেন)। যাইহোক, grub_diskfilter_write
ফাংশন একটি GRUB_ERR_NOT_IMPLEMENTED_YET
ত্রুটি উত্থাপন করে ।
quick_boot=0
করে সমস্যার সমাধান হয়? এবং কেন এটি ভুল সমাধান?আপনি যদি /etc/grub.d/00_header
কোডটিতে আরও একবার তাকান, আপনি দেখতে পাবেন যে বৈশিষ্ট্যযুক্ত রেকর্ডফিলটি কেবল তখন ব্যবহৃত হয় quick_boot=1
। সুতরাং, quick_boot
1 থেকে 0 এ পরিবর্তন করা রেকর্ডফিল বৈশিষ্ট্যটি অক্ষম করে এবং RAID / LVM পার্টিশনে লেখাগুলি অক্ষম করে।
তবে এটি অন্যান্য অনেকগুলি বৈশিষ্ট্যও অক্ষম করবে (চালান grep \$quick_boot /etc/grub.d/*
এবং আপনি দেখতে পাবেন)। আরও, যদি একদিন আপনি আপনার /boot/grub
ডিরেক্টরিটিকে RAID / LVM এর বাইরে পরিবর্তন করেন তবে রেকর্ডফেল বৈশিষ্ট্যটি এখনও অক্ষম থাকবে will
সংক্ষেপে, এই সমাধানটি অযথা বৈশিষ্ট্যগুলি অক্ষম করে এবং এটি জেনেরিক নয়।
save_env
GRUB যখন LVM বা RAID পার্টিশনের মধ্যে থাকে তখন সঠিক সমাধানটি বিবৃতিগুলি অক্ষম করা উচিত consider
এই সমাধানটি কার্যকর করার জন্য একটি প্যাচ দেবিয়ান বাগ ট্র্যাকার সিস্টেমে প্রস্তাব করা হয়েছিল। এটিতে পাওয়া যাবে: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=754921
এই প্যাচ পিছনে ধারণাটি হ'ল:
grub-probe --target=abstraction "${grubdir}"
ফাইল পড়ার / লেখার জন্য GRUB কোন ধরণের অ্যাবস্ট্রাকশন মডিউলগুলি ব্যবহার করে তা পেতে একটি কমান্ড চালান /boot/grub
;diskfilter
বা lvm
মডিউল, recordfail লাফালাফি save_env
বিবৃতি এবং একটি appropriated মন্তব্য লিখুন /boot/grub/grub.cfg
ফাইল;
# GRUB lacks write support for /dev/md0, so recordfail support is disabled.
আপনি যদি এই প্যাচটির জন্য অপেক্ষা করতে চান না তবে উবুন্টু / ডেবিয়ান ছেলেরা অফিশিয়াল কোডে প্রয়োগ করেছেন তবে আপনি আমার প্যাচ ব্যবহার করতে পারেন 00_header
:
# Download
wget https://gist.githubusercontent.com/rarylson/da6b77ad6edde25529b2/raw/99f266a10e663e1829efc25eca6eddb9412c6fdc/00_header_patched
# Apply
mv /etc/grub.d/00_header /etc/grub.d/00_header.orig
mv 00_header_patched /etc/grub.d/00_header
# Disable the old script and enable the new one
chmod -x /etc/grub.d/00_header.orig
chmod +x /etc/grub.d/00_header
# Update Grub
update-grub
00_header
ফাইল সম্পাদনা করে এখানে ফিক্সগুলির কোনওটিই কাজ করে না। আমি quick_boot
এটিকে দূরে সরিয়ে নিতে অক্ষম করব না ।
00_header
ফাইলটি (এখানে প্রস্তাবিত হিসাবে) কাজ করবে না কেন । আমি জানি যে এটি আমার জন্য কাজ করে (এবং র্যারেলসন ফ্রেইটাসের জন্য) এর অর্থ এই নয় যে এটি অগত্যা সবার জন্য কাজ করবে। তবে আপনি কি পুরানো এবং নতুনকে সঠিক অনুমতি দেওয়ার 00_header
এবং চালানোর জন্য নিশ্চিত করে রেখেছেন update-grub
? (আপনি যদি ঠিক 00_header
জায়গায় সম্পাদনা করেন chmod
তবে কোনও প্রয়োজন নেই, তবে update-grub
প্রয়োজনীয় থেকে যায়))
আমি মনে করি অভিযান বা এলভিএম বিভাজনের কারণে এই ত্রুটি ঘটেছে ।
এই সমস্যার জন্য অস্থায়ী সমাধানের জন্য:
সম্পাদনা করুন:/etc/grub.d/10_linux
প্রতিস্থাপন করা 'quick_boot="1"' with 'quick_boot="0"'
তারপরে:
sudo update-grub