ডিস্কফিল্টার লেখাগুলি সমর্থিত নয়> কী কারণে এই ত্রুটিটি ট্রিগার হয়?


88

গ্রাব মেনু ছেড়ে যাওয়ার সময় এবং উবুন্টু স্প্ল্যাশ স্ক্রিনের আগে এই বার্তাটি ঘটে।

বার্তাটি সাফ করতে আমি কীভাবে সমস্যাটি সমাধান করব?

আর এর অর্থ কি?

error:  Diskfilter writes are not supported

সিস্টেম বুট করে এবং ঠিক ঠিক কাজ করে বলে মনে হচ্ছে।


1
এখনও উবুন্টু ডেস্কটপ 15.04 এ স্থির করা হয়নি ...
ThePiercingPrince

1
এখনও 16.04 এ স্থির হয়নি। বাগ ফিক্সিংয়ের এই ভয়াবহ গতিটি ধরে রাখা শক্ত।
পল টমলিন

উত্তর:


145

এটি একটি বাগ!

এটি একটি বাগ যা উবুন্টু সার্ভার এলটিএস (উবুন্টু সার্ভার 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_boot1 থেকে 0 এ পরিবর্তন করা রেকর্ডফিল বৈশিষ্ট্যটি অক্ষম করে এবং RAID / LVM পার্টিশনে লেখাগুলি অক্ষম করে।

তবে এটি অন্যান্য অনেকগুলি বৈশিষ্ট্যও অক্ষম করবে (চালান grep \$quick_boot /etc/grub.d/*এবং আপনি দেখতে পাবেন)। আরও, যদি একদিন আপনি আপনার /boot/grubডিরেক্টরিটিকে RAID / LVM এর বাইরে পরিবর্তন করেন তবে রেকর্ডফেল বৈশিষ্ট্যটি এখনও অক্ষম থাকবে will

সংক্ষেপে, এই সমাধানটি অযথা বৈশিষ্ট্যগুলি অক্ষম করে এবং এটি জেনেরিক নয়।

সঠিক সমাধান কী?

save_envGRUB যখন LVM বা RAID পার্টিশনের মধ্যে থাকে তখন সঠিক সমাধানটি বিবৃতিগুলি অক্ষম করা উচিত consider

এই সমাধানটি কার্যকর করার জন্য একটি প্যাচ দেবিয়ান বাগ ট্র্যাকার সিস্টেমে প্রস্তাব করা হয়েছিল। এটিতে পাওয়া যাবে: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=754921

এই প্যাচ পিছনে ধারণাটি হ'ল:

  • ডিরেক্টরিতে grub-probe --target=abstraction "${grubdir}"ফাইল পড়ার / লেখার জন্য GRUB কোন ধরণের অ্যাবস্ট্রাকশন মডিউলগুলি ব্যবহার করে তা পেতে একটি কমান্ড চালান /boot/grub;
  • 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

বিশেষত বাগ রেফারেন্সের জন্য আপনাকে ধন্যবাদ। আমি আশা করি আপনি বুঝতে পারবেন যে আমি nux এর সমাধান আরও জোরালো পেয়েছি । ;)
সিএমডি চালান

6
হাই @ ক্লাসস্ট্যাকার, আমি উত্তরটি সংক্ষেপে বললাম! এটি খুব বড় ছিল এবং অনেকের পক্ষে এটি বোঝা খুব কঠিন ছিল: p এটি এখনও বড়, তবে কমপক্ষে আমি এটি বিভাগগুলিতে সংগঠিত করেছি। সুতরাং এখন আপনি কেবল আগ্রহের বিভাগগুলিতে দেখতে পারেন।
রেরিলসন ফ্রেইটাস

8
কি দারুন. ধন্যবাদ. যদি "মাসের উত্তর" বৈশিষ্ট্যটি থাকে তবে আমি আপনার পক্ষে ভোট দেব। এছাড়াও, আপনি একটি "নো বিএস" পুরষ্কার প্রাপ্য। এটি এমন ধরণের নিবন্ধ যা সত্যই মূল্য দেয় এবং ফোরামের তুলনায় এই সাইটের নেটওয়ার্কের মধ্যে একটি বিশাল পার্থক্য তৈরি করে।
সিএমডি চালান

1
দুর্ভাগ্যক্রমে আমি এই বাগ দ্বারা প্রভাবিত হয়েছি এবং বাগ রিপোর্টে বা এখানে 00_headerফাইল সম্পাদনা করে এখানে ফিক্সগুলির কোনওটিই কাজ করে না। আমি quick_bootএটিকে দূরে সরিয়ে নিতে অক্ষম করব না ।
ডগগ্রো

@ ডগগ্রো আমি নিশ্চিত নই যে সম্পাদিত 00_headerফাইলটি (এখানে প্রস্তাবিত হিসাবে) কাজ করবে না কেন । আমি জানি যে এটি আমার জন্য কাজ করে (এবং র্যারেলসন ফ্রেইটাসের জন্য) এর অর্থ এই নয় যে এটি অগত্যা সবার জন্য কাজ করবে। তবে আপনি কি পুরানো এবং নতুনকে সঠিক অনুমতি দেওয়ার 00_headerএবং চালানোর জন্য নিশ্চিত করে রেখেছেন update-grub? (আপনি যদি ঠিক 00_headerজায়গায় সম্পাদনা করেন chmodতবে কোনও প্রয়োজন নেই, তবে update-grubপ্রয়োজনীয় থেকে যায়))
এলিয়াহ কাগন

33

আমি মনে করি অভিযান বা এলভিএম বিভাজনের কারণে এই ত্রুটি ঘটেছে ।

এই সমস্যার জন্য অস্থায়ী সমাধানের জন্য:

সম্পাদনা করুন:/etc/grub.d/10_linux

প্রতিস্থাপন করা 'quick_boot="1"' with 'quick_boot="0"'

তারপরে:

sudo update-grub

ধন্যবাদ, এটি পুরোপুরি কাজ করেছে। হ্যাঁ, আমি সমস্ত খণ্ডের জন্য এলভিএম ব্যবহার করছি।
আরসিএফ

এই সমাধানের জন্য আপনাকে ধন্যবাদ। এটি আমার অনেক কাজ বাঁচিয়েছে। আপনার কি কিছুটা পটভূমি তথ্য আছে?
সিএমডি চালান

@ ক্লাসস্ট্যাকার আপনি যদি নক্সের কাছ থেকে আরও তথ্যের জন্য জিজ্ঞাসা করছেন তবে আপনার মন্তব্যটি (@nux) দিয়ে শুরু করতে হবে। আপনি যদি আমাকে জিজ্ঞাসা করেন, আপনি কোন ধরণের পটভূমি সন্ধান করছেন?
আরসিএফ

2
@ আরসিএফ-ইউ 14.04 1) না, আমার দরকার নেই। "পোস্ট লেখক সর্বদা আপনার মন্তব্য সম্পর্কে অবহিত করা হবে" তা জানতে কেবল "মন্তব্য যুক্ত করুন" -> "সহায়তা" এ ক্লিক করুন। ২) আমি জানতে চেয়েছিলাম (নাক্স থেকে) কেন এটি সমস্যার সমাধান করে, বিশেষত র্যারেলসন ফ্রেইটাসের বিস্তৃত উত্তর দিয়েছেন। আপনি যদি উত্তরটি দিতে পারেন তবে তা নির্দ্বিধায় করুন।
সিএমডি চালান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.