مونت خودکار پارتیشن های سیستمی در لینوکس

توجه: اقدامات زیر ممکنه باعث بشه سیستم شما موقتا بوت نشه. بنابراین با دقت کامل و با جست و جوی بیشتر در این مورد، عمل بفرمایید.

systemd میتونه بدون نیاز به فایل fstab پارتیشن ها رو مونت کنه. قبلا توضیح دادم چطوری. اما در این پست میخوام بگم systemd با استفاده از systemd-gpt-auto-generator میتونه پارتیشن های سیستمی رو بدون اینکه ما دخالتی داشته باشیم و حتی یونیت برای اونها بسازیم، مونت کنه. البته به شرطی که شما از هوک systemd در ساخت ایمیج کرنل استفاده کرده باشید.

منظور از پارتیشن های سیستمی یعنی پارتیشن روت در / پارتیشن بوت در /boot یا /efi پارتیشن هوم در /home و همچنین پارتیشن های دیگه از جمله /var و var/tmp و... مونت بشن.

توجه: حتما یک نسخه live روی مموری داشته باشید تا اگر با دستکاری های زیر دچار مشکل شدید بتونید قضیه رو حل کنید.

برای این کار اول اینکه باید پارتیشن های شما از نوع GPT باشند تا هر کدوم یک آی دی خاصی که بهشون Partition Type GUID میگن اختصاص داده بشه. در واقع systemd با استفاده از این نوع پارتیشن ها رو مشخص میکنه و اونها رو در جایی که باید، مونت میکنه. با این کار دیگه نیازی به فایل fstab نیست و نیازی هم به اضافه کردن مسیر پارتیشن root در خط کرنل بوت لودر هم نیست.

ادامه مطلب

درایور NTFS موجود در کرنل

سالها برای مونت کردن درایوهای ntfs در لینوکس، باید ntfs-3g رو نصب میکردیم و در متغیرهای مونت، نوع فایل‌سیستم رو ntfs-3g قرار میدادیم. اما از کرنل 5.15 درایور اختصاصی ntfs-3 با قابلیت خواندن و نوشتن در خود کرنل گنجانده شده و دیگه لازم نیست ntfs-3g رو نصب داشته باشیم.

و الان که کرنل در نسخه ۶.۷ بسر میبره، این درایور پیشرفت های زیادی داشته و حتی در مواردی بهتر از ntfs-3g هم عمل میکنه. و متغیرهای جالبی هم برای مونت درایو داره. از جمله:

  • nohidden: فایلها و فولدرهایی که در ویندوز hidden هستند (مثل فولدر system volume information) در لینوکس هم مخفی بمانند.
  • sys_immutable: فایلها و فولدرهایی که در ویندوز سیستمی تلقی میشن و قابل write نیستند، در لینوکس هم همین ویژگی رو داشته باشند.
  • hide_dot_files: فایلها و فولدرهایی که در لینوکس میسازیم و اونها رو با گذاشتن یک نقطه در ابتدای اسمشون مخفی میکنیم، در ویندوز هم hidden شناخته خواهند شد.
  • windows_names: نام فایلها و فولدرهایی که در لینوکس انتخاب میکنیم، با شیوه نام گذاری فایلها در ویندوز مغایرت نداشته باشند.
  • force: وقتی درایو در ویندوز هایبرنیت شده (که قابل مونت با ntfs-3g نیست) با این متغیر قابل مونت میشه.
  • و چند تا چیز مفید دیگه که توصیه میکنم در اینجا در موردش بخونید

کافیه برای استفاده از درایور ntfs کرنل، بجای ntfs-3g از ntfs-3 استفاده کنید و متغیرها رو بر اساس شیوه جدید تنظیم کنید. از هر نوع روشی که برای مونت استفاده میکنید مهم نیست، از دستور مستقیم mount یا فایل fstab یا یونیت های systemd. مثلا برای دستور مستقیم:

# mount -t ntfs-3 -o rw,nodev,noatime,nohidden,windows_names,uid=1000,gid=1000 /dev/sdXX /data/driveC

بعد از اینکه تست کردید و همه چیز اوکی بود، میتونید بسته ntfs-3g رو حذف کنید. اگر یک روزی خواستید از دستور ntfsfix استفاده کنید میبایست بسته ntfsprogs-ntfs3 رو از AUR نصب کنید.

گزینه های پیشفرض mount

شاید تا حالا براتون سوال پیش اومده باشه که در mount کردن درایوها، اون defaults چیه که همه جا هست؟! 

باید بگم که متغیر defaults شامل یک سری متغیرها است که بجای نوشتن همه اونها، شما فقط کافیه defaults رو بنویسید. تا سیستم موقع مونت کردن درایو (مثلا از روی فایل fstab) اون متغیرها رو اعمال کنه.

ما میتونیم این متغیرهای پیشفرض رو طبق سلیقه خودمون تغییر بدیم! برای این کار، کافیه فایل زیر رو یک نگاهی بیندازید:

$ nano /etc/udisks2/mount_options.conf.example

توضیحات فایل گویای خودش هست. شما میتونید برای انواع فایل سیستم (ext4 یا ntfs یا vfat و...) متغیر های پیشفرض خودتون رو تعیین کنید. از فایل نمونه بالا استفاده کنید و فایل نهایی رو بدون پسوند example در همون مسیر ذخیره کنید.

تغییر در مدیریت microcode در Arch

اگر از  Arch Linux استفاده میکنید و برای ساختن ایمیج کرنل از mkinitcpio استفاده میکنید، و همچنین بسته های microcode مربوط به CPU رو هم دارید (اینتل یا AMD) در ورژن ۳۸ از mkinitcpio تغییری در نحوه مدیریت microcode برای ساخت ایمیج کرنل در پروسه بوت اتفاق افتاده که میبایست به اون توجه کنیم. در واقع در ورژن جدید، ایمیج microcode دیگه جدا از ایمیج کرنل نخواهد بود و با هم ادغام میشن. مراحل زیر هنوز در wiki نیومده. ولی در اینجا میتونید پیشنویس‌ها رو ببینید.

  1. سیستم رو آپدیت کنید تا همه چیز بروزرسانی بشه.
  2. اگر فایل /etc/mkinicpio.conf رو دستکاری نکردید، بعد از آپدیت هم لازم نیست تغییرش بدید. با آپدیت، این فایل هم بروزرسانی میشه. اما اگر دستکاریش کردید، این فایل رو باز کنید و یک HOOK تحت نام microcode به قسمت مربوطه اضافه کنید. در هر صورت مطمئن بشید که این هوک وجود داشته باشه.
  3. سپس فایل preset مربوط به کرنلی که دارید (عموما /etc/mkinitcpio.d/linux.preset) رو باز کنید و خط مربوط به microcode رو حذف کنید یا کامنت کنید.
  4. سپس با دستورsudo mkinitcpio -P ایمیج کرنل رو بسازید.
  5. در نهایت باید خطوط مربوط به لود ایمیج microcode رو در بوت لودر خودتون (حالا هر چی که هست، grub یا systemd-boot یا rEFInd و...) حذف کنید.

استفاده از systemd برای mount درایوها

برای دسترسی به درایوها در لینوکس باید اونها رو اصطلاحا mount کنیم. یعنی یک فولدر بسازیم و به سیستم عامل بگیم که درایو مورد نظر ما رو داخلش نشون بده. برای اینکه این کار حین بوت انجام بشه، به طور سنتی از فایل /etc/fstab استفاده میکردیم.

اما با ظهور systemd و رفتن توزیع ها به سمت اون، تغییرات جدیدی در نحوه مدیریت خیلی چیزها از جمله ماونت کردن درایو ها ایجاد شد. systemd فایل fstab رو موقع بوت بررسی میکنه و به ازای هر ردیفی که داخلش وجود داره یک یونیت mount درست میکنه و سپس درایو مورد نظر ماونت میشه. 

چرا ما از اول خودمون این یونیت ها رو آماده نکنیم؟ که دیگه systemd مجبور نباشه در هر بوت اونها رو تولید کنه و بعد ماونت کنه؟ در این نوشته میخوام بگم من چطوری پارتیشن مورد نظرم رو با استفاده از systemd موقع بوت ماونت میکنم و دیگه توی fstab ردیفی برای اون قرار ندادم.

استفاده از systemd برای ماونت این فواید رو داره:

  • میتونید مشخص کنید درایو شما در چه زمانی ماونت بشه
  • میتونید مشخص کنید درایو شما فقط وقتی ماونت بشه که بهش نیاز دارید (Automount)
  • اگر مشکلی در فایل fstab وجود داشت، کل سیستم تحت تاثیر قرار نمیگیره، و فقط یک یونیت هست که دچار مشکل میشه.
  • به راحتی میتونیم با بررسی status یونیت مورد نظر، مشکل احتمالی رو پیدا کنیم.

ادامه مطلب

غیر فعال کردن ساخت ایمیج Fallback

در لینوکس های مبتنی بر آرچ، که با mkinitcpio ایمیج های کرنل ساخته میشن، همیشه یک ایمیج fallback هم ساخته میشه. این ایمیج یک سری hookهای پیش فرضی داره که اگر ایمیج اصلی دچار مشکل شد، بشه با این ایمیج سیستم رو بوت کرد.

من که توی این چند سال هیچ وقت نشد ازش استفاده کنم. اگر پارتیشن بوت شما حجمش کمه، و یا به هر دلیلی نمیخواید این ایمیج ساخته بشه، کافیه در فایل زیر، قسمت های مربوط به ایمیج fallback رو غیر فعال کنید و عبارت 'fallback' رو از کنار 'default' بر دارید. نهایتا یه چیزی شبیه این:

/usr/share/mkinitcpio/hook.preset
# mkinitcpio preset file for the '%KERNELBASE%' package #ALL_config="/etc/mkinitcpio.conf" ALL_kver="/boot/vmlinuz-%KERNELBASE%" ALL_microcode=(/boot/*-ucode.img) PRESETS=('default') #default_config="/etc/mkinitcpio.conf" default_image="/boot/initramfs-%KERNELBASE%.img" #default_uki="/efi/EFI/Linux/manjaro-%KERNELBASE%.efi" #default_options="--splash /usr/share/systemd/bootctl/splash-manjaro.bmp" #fallback_config="/etc/mkinitcpio.conf" #fallback_image="/boot/initramfs-%KERNELBASE%-fallback.img" #fallback_uki="/efi/EFI/Linux/manjaro-%KERNELBASE%-fallback.efi" #fallback_options="-S autodetect"

و اگر بخواید در کرنل فعلی که نصب هست هم این کار رو بکنید، کافیه همین تغییر رو در فایل preset مربوط به کرنل که در مسیر /etc/mkinitcpio.d قرار داره اعمال کنید. و در انتها ایمیج مربوط به fallback رو در مسیر پارتیشن بوت خودتون هم حذف کنید.

در واقع ما با ویرایش فایل hook.preset این تغییرات رو برای آپدیت های آینده کرنل یا کرنل های جدیدی که نصب خواهیم کرد دائمی میکنیم.




حاصل سر و کله زدن های من با لینوکس