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

امین 8 مارس 2024 زمان خواندن: 3 دقیقه

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

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

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

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

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

ابتدا با دستور زیر مشخصات پارتیشن ها رو پیدا میکنیم:

lsblk -o +PARTUUID,PARTTYPE

مثلا با یک همچین چیزی ممکنه مواجه بشید:

ما به قسمت PARTTYPE کار داریم. این قسمت مشخص کننده نوع پارتیشن هست. این صفحه رو حتما ببینید تا با انواع پارتیشنها در لینوکس آشنا بشید.

در مثال بالا sda1 با مشخصات c12a7328-f81f-11d2-ba4b-00a0c93ec93b همون طور که در جدول این صفحه اومده، پارتیشن boot از نوع EFI هست. همچنین sda2 با مشخصات 4f68bce3-e8cd-4db1-96e7-fbcaf984b709 پارتیشن root برای سیستم های x86-64 هست. پارتیشن sdb1 هم که در یک دیوایس (هارد دیسک) دیگه است یک فضای ذخیره عادی است.

حواستون باشه که اگر بخواید systemd-gpt-auto-generator پارتیشن های سیستمی شما رو مونت کنه، همشون باید در یک دیوایس (هارد دیسک) قرار گرفته باشند. 

اگر PARTTYPE پارتیشن های سیستمی شما مطابق با این مشخصات نیستند، باید اونها رو تغییر بدید. همچنین ممکنه شما پارتیشن بندی متفاوتی داشته باشید و swap هم داشته باشید یا پارتیشن home هم جداگانه داشته باشید. بر اساس همون صفحه ای که بالاتر گفتم، از قسمت Partition Type GUID این مقادیر رو پیدا خواهید کرد.

توجه: با تغییر PARTTYPE نباید مشکلی در دیتای شما پیش بیاد. با این حال داشتن بکاپ و آماده بودن برای هر اتفاقی شرط عقل است.

برای تغییر نوع پارتیشن میتونیم از fdisk استفاده کنیم. برای اینکار با توجه به نوع درایوهای خودتون وارد پیکربندی همون هاردتون بشید. مثلا:

$ sudo fdisk /dev/sda

سپس با دستور m میتونید یک لیستی از دستورات fdisk رو ببینید. برای تغییر نوع پارتیشن t رو بزنید. و بعد انتخاب کنید که کدوم پارتیشن رو میخواید تغییر بدید. مثلا پارتیشن 1 که در مثال ما پارتیشن Boot هست.

حالا از شما میپرسه نوع پارتیشن چی باشه؟ با L میتونید یک لیست کامل از انواع پارتیشنها رو ببینید. اگر پارتیشن boot رو میخواید مشخص کنید، همون رو c12a7328-f81f-11d2-ba4b-00a0c93ec93b بنویسید و اینتر بزنید. و بعد تک تک پارتیشن های دیگه رو بر اساس پارتیشن‌بندی خودتون نوعش رو مشخص کنید و در پایان w رو بزنید تا تغییرات روی هارد انجام بشن. با زدن q بدون ذخیره شدن تغییرات روی هارد از fdisk خارج میشید.

تا زمانی که پارتیشن بندی شما تغییر نکنه، و فقط در حد فرمت کردن پارتیشن ها اونها رو انگولک کنید، این PARTTYPE تغییر نخواهد کرد. یعنی مثلا پارتیشن boot همیشه پارتیشن boot باقی خواهد ماند.

وقتی انواع پارتیشن ها رو بر اساس نیازتون مشخص کردید، در بوت بعدی systemd-gpt-auto-generator  اون ها رو در جای خودشون مونت خواهد کرد. پارتیشن root که در مسیر / مونت خواهد شد. اما برای پارتیشن بوت میبایست فولدر /boot از قبل وجود داشته باشه. (من /boot رو به جای /efi ترجیح میدم). در مورد پارتیشن home هم قاعدتا همین هست. یعنی فولدر /home باید از قبل وجود داشته باشه. پس اگر وجود ندارند، اونها رو بسازید.

در پایان میتونید مسیرهای پارتیشن های boot و root رو که در فایل fstab داشتید بردارید. (اونها رو comment کنید) و سپس سیستم رو ریبوت کنید! آماده هر اتفاقی باشید!

اگر سیستم شما بوت شد، که خب بحمدالله مشکلی نیست. اما اگر بوت نشد، بر اساس پیام خطایی که میگیرید عمل کنید. در این زمان میبایست با یک iso لایو سیستم رو بوت کنید و با chroot مشکل رو برطرف کنید.

اگر مشکلی نبود، میتونید قسمت مربوط به پارتیشن root رو هم از منوی بوت لودر خودتون حذف کنید. که بسته به نوع بوت لودر شما (گراب یا systemd یا هر چیز دیگه) متفاوت هست. چون که systemd پارتیشن root رو با استفاده از PARTTYPE در ابتدای بوت شناسایی میکنه و نیازی نیست موقع بوت ما چیزی رو تعیین کنیم. در نهایت یک بار image کرنل رو محض احتیاط با mkinitcpio یا هر چیز دیگه ای که میسازید، بسازید و منوهای بوت لودر رو باز سازی کنید.

اولین نفری باشید که دیدگاهی ارسال می کند!




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