btrfs রাস্পিয়ান উপর রুট ফাইল সিস্টেম


11

আমি ভেবেছিলাম যে বিটিআরএফগুলি মূল বিভাজন হিসাবে প্রসারিত করতে পারি তা দেখার জন্য এটি কীভাবে বিদ্যুত কাটার সময় দুর্নীতি দায়ের করে। তবে আমি এটি বুট করতে পারি না।

আমি কি করেছিলাম:

  1. সুইচ করার আগে পিআইতে:

    apt-get btrfs-tools ইনস্টল করুন 2. একটি লিনাক্স কম্পিউটার থেকে:

    বিটিআরএফএস-রূপান্তর / দেব / এসডিএ 2

  2. ইন /etc/fstabপরিবর্তন ext4করতেbtrfs

  3. ইন /cmdline.txtপরিবর্তন ext4করতেbtrfs

আমি বুট করার চেষ্টা করলে আমি কর্নেল প্যানিক পাই। আমার আর কিছু করা উচিত?

উত্তর:


7

যদি বিটিআরএফসগুলি কার্নেল মডিউল হিসাবে সংকলিত হয়, তবে আপনাকে বুটে মডিউলটি লোড করার জন্য একটি initramfs তৈরি করতে হবে। রাস্পিয়ান (এবং অন্যান্য ডেবিয়ান ডেরিভেটিভস) এ, update-initramfsএটি করার সবচেয়ে সহজ পদ্ধতি।

যদি initramfs-toolsইনস্টল করা থাকে, তবে যে কোনও সময় apt-getকোনও নতুন কার্নেল ইনস্টল হয়, এটি update-initramfsস্বয়ংক্রিয়ভাবে ট্রিগার হওয়া উচিত ।

sudo apt-get update
sudo apt-get install initramfs-tools

তবে, আপনি যদি rpi-updateনতুন কার্নেল ইনস্টল করতে ব্যবহার করেন তবে নতুন কার্নেলটিতে update-initramfsপুনরায় বুট করার আগে আপনাকে ম্যানুয়ালি চালানো দরকার :

sudo update-initramfs -u -k <kernel-version>

এটি এতে initramfs তৈরি বা আপডেট করবে /boot/initrd.img-<kernel-version>

চূড়ান্ত পদক্ষেপটি এটি আপনার বুট কনফিগারেশনে যুক্ত করা: এতে নিচের লাইনটি যুক্ত করুন /boot/config.txt:

initramfs initrd.img-<kernel-version> followkernel

initrd-<kernel-version>অবশ্যই ফাইলটির নামের সাথে মেলে /boot

প্রতিবার চালানোর সময় আপনাকে এই ধাপগুলি পুনরাবৃত্তি করতে হবে rpi-update


2

আমার দ্রুত পরীক্ষাটি দেখায় যে বিটিআরএফএস সমর্থনটি রাস্পবিয়ানের একটি বাহ্যিক মডিউল হিসাবে নির্মিত হয়েছে, কার্নেলের সাথে সরাসরি যুক্ত নয়।

এর অর্থ হ'ল রুট ফাইল সিস্টেমটি কীভাবে মাউন্ট করতে হয় তার আগে কার্নেলটিকে সেই মডিউলটি (যা রুট ফাইল সিস্টেমে সঞ্চিত) লোড করতে সক্ষম হতে হবে। স্পষ্টতই, এটি কাজ করে না।

পন্থা 1:

আপনার নিজস্ব কার্নেল তৈরি করুন, এবং এটি বিআরটিএফ-এর প্রাক-লিঙ্কে বিল্ড কনফিগার করুন twe আপনার নিজের কার্নেলটি কীভাবে তৈরি করতে এবং লোড করা যায় তা যদি আপনি নির্ণয় করেন তবে কনফিগারটি টিক্ক করা সহজ।

পদ্ধতির 2:

জিনিসগুলি পুনরায় সমন্বয় করুন যাতে কার্নেল এবং মডিউলগুলি একটি ext4 ফাইল সিস্টেমে থাকে এবং আপনি যে ডেটাটি সবচেয়ে বেশি সংকোচন করতে চান সেটি একটি বিটিআরএস বিভাজনে থাকে।

পদ্ধতির 2 এ:

রুট পার্টিশনটি ext4 হিসাবে ছেড়ে দিন এবং বিটিআরএফ ভিত্তিক একটি নতুন পার্টিশন তৈরি করুন, তবে এটি ওএস ইনস্টলেশন সঙ্কুচিত করতে সহায়তা করে না (যদি এটি আপনার লক্ষ্য)।

পদ্ধতির 2 বি:

একটি বুট পার্টিশন তৈরি করুন যা ছোট, এবং কার্নেল এবং মডিউলগুলি ধারণ করে, বিটিআরএস-এ সমস্ত কিছু রেখে। পাইয়ের বুটলোডারটির জন্য এটি কীভাবে করা যায় বা এর সীমাবদ্ধতাগুলি কী তা সম্পর্কে আমার কোনও ধারণা নেই।


বুট পার্টিশনে বিটিআরএফএস মডিউলগুলি অনুলিপি করা এবং সেখান থেকে লোড করার আগে কী হবে?
গাইসফট

3
একটি initrd.img দিয়ে শুরু করা কি সম্ভব নয়?
অ্যান্ডার্স

হ্যাঁ, এবং initrd.img এটিকে সমাধান করার সবচেয়ে সহজ উপায় বলে মনে হচ্ছে! আমি কখনই এটি ব্যবহার করি নি। "মকিনিটার্ড" এ নথির সন্ধান করুন।
ডনগার

হুম মনে হচ্ছে CONFIG_BLK_DEV_INITRD সর্বশেষতম রাস্পিয়ান এ সক্ষম নয়। এর অর্থ, ডিআইডি সমর্থন সক্ষম করার জন্য আপনাকে কার্নেলটি পুনরায় সংকলন করতে হবে।
গাইসফট

1
Paxswill.com/blog/2013/11/04/encrypted-raspberry-pi দেখুন - সেখানে এনক্রিপ্ট করা মূলের অনুমতি দেওয়ার জন্য initramfs ব্যবহার করা হয়। একইভাবে, রুট উপলব্ধ হওয়ার আগে ক্রিপ্টসেটআপের জন্য সমর্থন (এখানে বিটিআরটিএস) প্রয়োজন needed
Rbjz

1

এটি আমার বাহ্যিক বিটিআরএফএস রুট পার্টিশনটি সন্ধান করার জন্য, আমাকে বুট পার্টিশনের রুট পার্টিশনের ইউআইডি স্পষ্টভাবে উল্লেখ করা দরকার cmdline.txt। উদাহরণ স্বরূপ:

dwc_otg.lpm_enable = 0 কনসোল = tty1 রুট = পার্টউইউড = 123e4567-e89b-12d3-a456-426655440000 রুটস্টাইপ = বিটিআরএফস লিফট = ডেডলাইন রুটওয়েট শান্ত স্প্ল্যাশ

আপনি বিটিআরএফএস বিভাজনের ইউআইডি ব্যবহার করে নির্ধারণ করতে পারেন lsblk -f


1

রাস্পবিয়ান কার্নেল btrfsডিফল্টরূপে সমর্থন অন্তর্ভুক্ত করে না ; প্রাথমিক বুট স্টেজগুলি স্বাভাবিকভাবে চলতে থাকে, তবে কার্নেলটি লোড হয়ে গেলে এটি কোনও ফাইল সিস্টেম দেখতে পাবে না যা এটি মাউন্ট করতে পারে - এবং প্যানিক্স। একটি সমাধান উপস্থিত রয়েছে: বিআরটিফগুলি কার্নেল মডিউল হিসাবে, আরম্ভরূপে যুক্ত করুন। তিনটি বিভিন্ন নিবন্ধকে বৃহতভাবে ধন্যবাদ , আমি এটিকে এটি সেট আপ করেছি:

  • প্রয়োজনীয় প্যাকেজগুলি ইনস্টল করুন - কার্নেল মডিউল এবং এর সাহায্যে initramfs আপডেট করার সরঞ্জামগুলি: sudo apt install btrfs-tools initramfs-tools
  • বিআরটিএফএস মডিউলটি লোড করার জন্য ইনিরামকে বলুন (কোনও কারণে অটোমেজিকভাবে হওয়া উচিত, কোনও কারণে আমার আরপিআই 1 তে কাজ করেনি) - প্রয়োজনীয় মডিউলগুলির তালিকায় "বিটিআরএফএস" দিয়ে একটি লাইন যুক্ত করুন: echo 'btrfs' | sudo tee -a /etc/initramfs-tools/modules
  • বিটিআরএফ-এর জন্য একটি ইন্ট্রামফ হুক (চিত্র তৈরির জন্য) এবং স্ক্রিপ্ট (বুটিংয়ের জন্য) তৈরি করুন - ডিফল্ট সরবরাহ করা হয়, তবে আমার পরীক্ষায় সেগুলি স্বয়ংক্রিয়ভাবে ব্যবহৃত হয়নি, তাদেরকে / ইত্যাদিতে অনুলিপি করতে হয়েছিল। sudo mkdir -p /etc/initramfs-tools/hooks ; sudo mkdir -p /etc/initramfs-tools/scripts/local-premount ; sudo cp /usr/share/initramfs-tools/hooks/btrfs /etc/initramfs-tools/hooks ; sudo cp /usr/share/initramfs-tools/scripts/local-premount/btrfs /etc/initramfs-tools/scripts/local-premount; sudo chmod +x /etc/initramfs-tools/hooks/btrfs /etc/initramfs-tools/scripts/local-premount/btrfs
  • -cবর্তমান কার্নেল সংস্করণ (আনম-আর) এর জন্য নতুন initramfs তৈরি করুন - আপনি যদি কোনও বিদ্যমান আপডেট করেন তবে -uপরিবর্তে আপনাকে আপডেট ( ) ব্যবহার করতে হবে। এটি /boot/initrd.img-* এর মতো একটি ফাইল তৈরি করবে, যেখানে * বর্তমান কার্নেল সংস্করণ। উত্পন্ন নামটি নোট করুন (স্ক্রিপ্ট এটি আউটপুট দেবে), আমরা এটি পরবর্তী পদক্ষেপে ব্যবহার করব।update-initramfs -c -k $(uname -r)
  • /boot/config.txtএই initramfs ব্যবহার করতে সম্পাদনা করুন , initramfs initrd.img-3.11.0+ followkernelফাইলের নামটি পথ ছাড়াই যুক্ত করা হচ্ছে, এটি আগের পদক্ষেপে উত্পন্ন একটি; "ফলোকারেল" মেমোরিতে অবস্থান নিয়ন্ত্রণ করে ( config.txt ডকুমেন্টেশন )।
  • এটি বর্তমান কার্নেলটি সমাধান করে, তবে @ ইঙ্গো উল্লেখ করেছে যে কার্নেলটি আপগ্রেড করার ফলে সিস্টেমটি ভেঙে যাবে। এটি ঠিক করার জন্য, আমি তার কার্নেল-ইনস্টল হুক স্ক্রিপ্টগুলি ব্যবহার করেছি :

    • সম্পাদনা করুন / ইত্যাদি / ডিফল্ট / রাস্পবেরি-কার্নেল এবং অসুবিধা INITRD=Yes
    • মুছে ফেলা /etc/kernel/postinst.d/initramfs-tools
    • যোগ rpi-initramfs -র-সরঞ্জাম /etc/kernel/postinst.d/ প্রয়োজন এবং chmod +xএটা
    • allyচ্ছিকভাবে, initramfs এর সহজ ম্যানুয়াল আপডেটের জন্য আপডেট-rpi-initramfs ডাউনলোড করুন।
  • এই মুহুর্তে, আমাদের একটি সিস্টেম রয়েছে যা বিআরটিএফগুলি রুট ডিভাইস হিসাবে ব্যবহার করতে পারে । পুনরায় বুট করার মাধ্যমে পরীক্ষা করুন: সিস্টেমটি এখনও ext4 পার্টিশন থেকে বুট করবে (বা আপনার /boot/Cddline.txt এর মধ্যে যা আছে ) তবে dmesg | grep -i btrfsএখন "বিটিআরএফএস বোঝা" সম্বলিত একটি লাইন প্রদর্শন করা উচিত। এখন আমাদের আসলে একটি বিটিআরএফ বিভাজন তৈরি এবং ব্যবহার করা দরকার।

  • /(Ext4) পার্টিশনের একটি ব্যাকআপ তৈরি করুন - এটি / dev / mmcblk0p2 হিসাবে ধরে নিচ্ছেন - সাধারণত: আরপিআই বন্ধ করুন, এসডি কার্ডটি সরিয়ে নিন, অন্য কোথাও মাউন্ট করুন ( sudo mount /dev/mmcblk0p2 /mntলিনাক্স কম্পিউটারে এই উদাহরণে ) এবং সামগ্রী সংরক্ষণাগার; মনে রাখবেন যে আপনাকে এমন একটি সরঞ্জাম ব্যবহার করতে হবে যা মালিকানা এবং অনুমতিগুলি সংরক্ষণ করে, যেমন: টার: cd /mnt; sudo tar -czvf ~/rpi-rootfs-backup.tgz *(এবং তারপরে আবার এসডি কার্ড আনমাউন্ট করুন)

  • কোথাও একটি বিটিআরএফএস পার্টিশন তৈরি করুন - আমি এসডি কার্ডটি পুনরায় ব্যবহার করেছি, এক্সট 4 পার্টিশন (/ dev / mmcblk0p2) প্রতিস্থাপন করেছি; আপনি যদি কোনও বিটিআরএফএস-রেইড অ্যারে তৈরি করতে সন্ধান করছেন তবে এই সময়টি করার এই সময়টি ( এটি mkfs.btrfs এর পক্ষে যুক্তিগুলির মধ্যে একটি , এই উত্তরের ক্ষেত্রের বাইরে):mkfs.btrfs /dev/mmcblk0p2
  • বিটিআরএফস পার্টিশনটি মাউন্ট করুন এবং এতে ব্যাকআপ পুনরুদ্ধার করুন: sudo partprobe; sudo mount /dev/mmcblk0p2 /mnt; cd /mnt; tar -xzvf ~/rpi-rootfs-backup.tgz
  • Btrfs পার্টিশনে fstab সম্পাদনা করুন :sudo nano /mnt/etc/fstab

এটির মতো সারি থাকতে হবে:

/dev/mmcblk0p2  / ext4 foo,bar,baz 0 1

এটিতে এটি পরিবর্তন করুন (নতুন এফএস টাইপটি বিটিআরএফএস এবং এটি ডিফল্ট বিকল্পগুলি ব্যবহার করে):

/dev/mmcblk0p2  / btrfs defaults 0 1
  • পার্টিশনটি আনমাউন্ট করুন, তবে এসডি কার্ডটি এখনও মুছে ফেলবেন না! sudo umount /mnt
  • আমাদের আরপিআইকে বলা দরকার যে এটি বিটিআরএফএস থেকে বুট হতে চলেছে
  • আপনার নতুন Btrfs পার্টিশন এর UUID খুঁজুন - আপনার / dev / mmcblk0p2 সঙ্গে সঙ্গতিপূর্ণ, এবং UUID = অংশ (UUID_SUB না, না PARTUUID সঙ্গে কপি যে বুট-লোডার মধ্যে একটি বাগ সংশোধন করা কার্নেল বুট হবে না আরম্ভ হবে, এবং ।):sudo blkid

    / dev / mmcblk0p2: UID = "ক্যাফেবিফ -0000-1234-আআআআআ-12346589" ইউইউডিএসউবি = "ababccdd-2345-cafe-beee-587989991110" TYPE = "বিটিআরএফস" পার্টুউইড = "গরুর মাংস -02"

  • বুট (FAT32) পার্টিশনটি মাউন্ট করুন: sudo mount /dev/mmcblk0p1 /mnt

  • Cmdline.txt সম্পাদনা করুন: sudo nano /mnt/cmdline.txt

এই দুটি পরামিতি সন্ধান করুন

 root=PARTUUID=1234-5678 rootfstype=ext4

এবং সাথে প্রতিস্থাপন

 root=UUID=cafebeef-0000-1234-aaaa-12346589 rootfstype=btrfs

মনে রাখবেন যে ইউইউডি হ'ল আমরা কোনও উদ্ধৃতি ছাড়াই আগে কপি করেছি।

  • আরপিআই বুট পার্টিশন আনমাউন্ট করুন: sudo umount /mnt
  • এসডি কার্ডটি আরপিআইতে প্রতিস্থাপন করুন এবং বুট করুন।
  • আরপিআইতে দেখুন যে আপনি সত্যই একটি বিটিআরএস রুট মাউন্ট থেকে চালাচ্ছেন: mount

    / dev / mmcblk0p2 on / type btrfs (rw, space_cache, subvol = /)

  • এট ভয়েইল! বেশ পয়েন্ট-এন্ড-ক্লিক নয়, তবে দৈত্যদের কাঁধে দাঁড়িয়ে আমি এটি কাজ করতে পারি। ( এটি একটি রেপোতেও তৈরি করুন ))


1
প্রথমটি sudo apt upgradeযদি এটি কার্নেলকেও আপগ্রেড করে তবে বুটটিতে এই সেটআপটি নাটকীয়ভাবে ব্যর্থ হবে কারণ নতুন কর্নেল পুরানো ইনিরামফগুলি ব্যর্থ হবে এবং কার্নেলটি বিটিআরএফএস ড্রাইভার লোড করতে পারে না load এবং এটি ঠিক করার সহজ উপায় নয়, কমপক্ষে chrootএকটি আর্মএফ সিস্টেম ব্যবহার করে।
ইনগো 21

আপডেট-ইনস্ট্র্যামফগুলি কার্নেল আপগ্রেডে আটকানো হবে না?
পিসকভোর

1
না, ডিফল্ট রাস্পবিয়ান একটি নতুন ইন্ট্রামফ তৈরি করতে ব্যর্থ। এটি এর জন্য কনফিগার করা হয়নি। apt upgradeনতুন কর্নেলটি বুট করার আগে - আপনাকে সর্বদা আপনার চোখের সাহায্যে যা যা করা হচ্ছে তা পর্যবেক্ষণ করতে হবে এবং যদি প্রয়োজন হয় তবে হাতে হাতে একটি থিম্রামফ তৈরি করতে হবে। কোনও শিক্ষানবিসের পক্ষে একটি কার্যকর কাজ নয় কারণ এটি ব্যর্থ হওয়া নাটকীয়। আপনার কাছে একটি নজর থাকতে পারে আমি রাস্পবেরি পাই বুট
ইনগো

1
এটিতে একটি সামান্য বাগ রয়েছে যা আমি সবেমাত্র পেয়েছি তবে এখনও পর্যন্ত ঠিক করা হয়নি। কার্নেল দুটি মডেল, যেমন 4.14.98+এবং সমর্থন করে 4.14.98-v7+। আপডেট-initramfs যদি কার্নেল আপডেট দ্বারা ট্রিগার করা হয় তবে এটি দুটি মেশিনের জন্য একটি দুটি initrd.img * উত্পন্ন করবে। এটি /bootপার্টিশনের সাথে খাপ খায় না (ত্রুটি - স্থানের বাইরে) এবং প্রজন্ম শেষ হয় না।
ইনগো

1
আমি ব্যবহার বিবেচনা MODULES=list
ইনগো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.