SYSTEMD-GPT-AUTO-GENERATOR(8) systemd-gpt-auto-generator SYSTEMD-GPT-AUTO-GENERATOR(8)

systemd-gpt-auto-generator - تولیدکننده خودکار شناسایی و سوار کردن پارتیشن‌های ریشه، خانه و سوآپ بر اساس GPT

/usr/lib/systemd/system-generators/systemd-gpt-auto-generator

systemd-gpt-auto-generator یک تولیدکننده واحد (unit generator) است که به‌طور خودکار پارتیشن ریشه (root)، /home/، /srv/، /var/، /var/tmp/، پارتیشن سیستم EFI (ESP)، پارتیشن بارگذار بوت توسعه‌یافته (XBOOTLDR)، و پارتیشن‌های سوآپ (swap) را شناسایی کرده و بر اساس GUIDهای نوع پارتیشن در جدول‌های پارتیشن GPT، واحدهای سوار کردن (mount) و سوآپ ایجاد می‌کند. برای جزئیات بیشتر، به مشخصات UEFI[1]، فصل ۵ مراجعه کنید. این برنامه مشخصات UAPI.2 Discoverable Partitions Specification[2] را پیاده‌سازی می‌کند.

توجه داشته باشید که این تولیدکننده بر روی سیستم‌های غیر GPT هیچ تاثیری ندارد. همچنین برای دایرکتوری‌هایی که از قبل حاوی فایل هستند، یا اگر نقطه سوار شدن به‌طور صریح در fstab(5) پیکربندی شده باشد، پیکربندی نقطه سوار کردن ایجاد نخواهد کرد. علاوه بر این، اگر ورودی‌های سوار کردن در سلسله‌مراتب /boot/ یا /efi/ در fstab(5) یافت شوند، هیچ واحدی برای پارتیشن ESP یا XBOOTLDR ایجاد نخواهد شد.

اگر واحدهایی که این تولیدکننده ایجاد می‌کند لغو (override) شوند، برای مثال توسط واحدهایی در دایرکتوری‌هایی با اولویت بالاتر، فایل‌های drop-in و وابستگی‌های اضافی ایجادشده توسط این تولیدکننده ممکن است همچنان مورد استفاده قرار گیرند.

هنگامی که این تولیدکننده در دیسک رم اولیه (initrd) اجرا می‌شود، می‌تواند به‌طور خودکار سیستم فایل ریشه را جستجو کند. به‌طور مشخص:

•این ابزار به دنبال پارتیشن ریشه روی همان دیسک فیزیکی که پارتیشن سیستم EFI (ESP) روی آن قرار دارد می‌گردد. توجه داشته باشید که برای کارکرد این قابلیت، پشتیبانی از سمت بارگذار بوت الزامی است: متغیر EFI به نام LoaderDevicePartUUID مربوط به شناسه فروشنده (vendor UUID) 4a67b082-0a4c-41cf-b6c7-440b29bb8c4f برای تعیین این که سیستم از کدام پارتیشن (و در نتیجه از کدام دیسک) بوت شده است استفاده می‌شود. اگر بارگذار بوت این متغیر را تنظیم نکند، این تولیدکننده قادر به تشخیص پارتیشن ریشه نخواهد بود. برای جزئیات بیشتر به Boot Loader Interface[3] مراجعه کنید.
•در روش دیگر، این ابزار به دنبال سیستم فایل ریشه روی یک دستگاه بلوکی لوپ‌بک (loopback) که فیلد ".lo_name" آن بر روی یکی از رشته‌های صریح "rootdisk" یا "rootdisk.raw" تنظیم شده باشد می‌گردد. این فیلد می‌تواند از طریق رشته‌ی --loop-ref= دستور losetup' تنظیم شود. برای ایمیج‌های دانلود شده از طریق systemd-import-generator(8) اطمینان حاصل کنید که گزینه "blockdev" را تنظیم کرده و رشته نام محلی را روی "rootdisk" تنظیم کنید تا به این نتیجه برسید. توجه داشته باشید که شناسایی سیستم فایل ریشه روی دستگاه‌های بلوکی لوپ‌بک به این شکل، تنها در صورتی انجام می‌شود که "root=gpt-auto" یا "root=dissect" به‌طور صریح در خط فرمان هسته مشخص شده باشد، برخلاف شناسایی مبتنی بر ESP گزارش‌شده توسط بارگذار بوت که حتی اگر هیچ پارامتر "root=" مشخص نشده باشد نیز فعال است. (روش دوم به تولید پیوند نمادین دستگاه بلوکی /dev/gpt-auto-root توسط systemd-udevd.service' متکی است).
•این ابزار همچنین در صورت وجود، یک فایل واحد برای سوار کردن پارتیشن سیستم EFI (ESP) در /sysefi/ تولید می‌کند. برخلاف سیستم‌های فایل ذکر شده در بالا، این نقطه سوار شدن به‌طور پیش‌فرض فعال نمی‌شود، اما می‌تواند توسط سرویس‌هایی که از درون initrd به دسترسی ESP نیاز دارند فراخوانی شود. توجه داشته باشید که این نقطه سوار شدن مخصوص initrd است و از autofs استفاده نمی‌کند. هنگامی که سیستم از initrd خارج می‌شود، ESP معمولاً در مکان دیگری و از طریق autofs سوار می‌شود.

هنگامی که روی سیستم میزبان اجرا می‌شود (یعنی پس از انتقال موفقیت‌آمیز از initrd به سیستم فایل ریشه)، این تولیدکننده به دنبال تمام پارتیشن‌های دیگر روی همان دیسک فیزیکی پارتیشن ریشه می‌گردد. برای این شناسایی، پشتیبانی از بارگذار بوت لازم نیست. علاوه بر این، نیازی نیست که پارتیشن ریشه به‌طور خودکار توسط initrd شناسایی شده باشد (همان‌طور که در بالا توضیح داده شد) تا شناسایی پارتیشن‌های غیر ریشه انجام گیرد. به عبارت دیگر: شناسایی خودکار سیستم فایل ریشه و سیستم‌های فایل غیر ریشه عملیات‌های مستقلی هستند که به یکدیگر وابسته نبوده و در دو فاز متمایز از فرآیند بوت انجام می‌شوند (یکی در initrd، دیگری پس از آن). این پارتیشن‌ها در سیستم‌هایی که سیستم فایل ریشه روی چندین دیسک توزیع شده است (برای مثال از طریق btrfs RAID)، جستجو نخواهند شد.

پارتیشن ریشه را می‌توان با ایجاد پیوند نمادین از /run/systemd/volatile-root به /dev/block/$major:$minor به‌طور صریح پیکربندی کرد. این کار به‌ویژه زمانی مفید است که سوار شدن ریشه با نوعی سیستم فایل فرار (overlayfs) جایگزین شده باشد.

systemd-gpt-auto-generator برای متمرکز کردن پیکربندی سیستم فایل در جدول پارتیشن و بی‌نیاز کردن از پیکربندی در /etc/fstab یا خط فرمان هسته بسیار کاربردی است.

این تولیدکننده پارتیشن‌ها را بر اساس GUID نوع پارتیشن آن‌ها شناسایی می‌کند. GUIDهای نوع پارتیشن زیر شناسایی می‌شوند:

Table 1. Partition Type GUIDs

Partition Type GUID نام نقطه سوار کردن توضیحات
SD_GPT_ROOT_X86_64 4f68bce3-e8cd-4db1-96e7-fbcaf984b709 پارتیشن ریشه (x86-64) / نخستین پارتیشن با این UUID نوع، واقع بر روی همان دیسک ESP استفاده‌شده برای بوت، به عنوان سیستم فایل ریشه / در سیستم‌های AMD64 / 64-bit x86 استفاده می‌شود.
SD_GPT_ROOT_ARM64 b921b045-1df0-41c3-af44-4c6f280d3fae پارتیشن ریشه (64-bit ARM) / نخستین پارتیشن با این UUID نوع، واقع بر روی همان دیسک ESP استفاده‌شده برای بوت، به عنوان سیستم فایل ریشه / در سیستم‌های AArch64 / 64-bit ARM استفاده می‌شود.
SD_GPT_ROOT_ALPHA SD_GPT_ROOT_ARC SD_GPT_ROOT_ARM SD_GPT_ROOT_ARM64 SD_GPT_ROOT_IA64 SD_GPT_ROOT_LOONGARCH64 SD_GPT_ROOT_MIPS SD_GPT_ROOT_MIPS64 SD_GPT_ROOT_MIPS_LE SD_GPT_ROOT_MIPS64_LE SD_GPT_ROOT_PARISC SD_GPT_ROOT_PPC SD_GPT_ROOT_PPC64 SD_GPT_ROOT_PPC64_LE SD_GPT_ROOT_RISCV32 SD_GPT_ROOT_RISCV64 SD_GPT_ROOT_S390 SD_GPT_ROOT_S390X SD_GPT_ROOT_TILEGX SD_GPT_ROOT_X86 SD_GPT_ROOT_X86_64 SD_GPT_USR_ALPHA SD_GPT_USR_ARC SD_GPT_USR_ARM SD_GPT_USR_IA64 SD_GPT_USR_LOONGARCH64 SD_GPT_USR_MIPS_LE SD_GPT_USR_MIPS64_LE SD_GPT_USR_PARISC SD_GPT_USR_PPC SD_GPT_USR_PPC64 SD_GPT_USR_PPC64_LE SD_GPT_USR_RISCV32 SD_GPT_USR_RISCV64 SD_GPT_USR_S390 SD_GPT_USR_S390X SD_GPT_USR_TILEGX SD_GPT_USR_X86 ... پارتیشن‌های ریشه برای سایر معماری‌ها / نخستین پارتیشن با UUID نوع مطابق با معماری، واقع بر روی همان دیسک ESP استفاده‌شده برای بوت، به عنوان سیستم فایل ریشه / استفاده می‌شود. برای فهرست کامل و مقادیر ثابت، به UAPI.2 Discoverable Partitions Specification[2] مراجعه کنید.
SD_GPT_HOME 933ac7e1-2eb4-4f13-b844-0e14e2aef915 پارتیشن خانه (Home) /home/ نخستین پارتیشن با این UUID نوع روی همان دیسک پارتیشن ریشه، در /home/ سوار می‌شود.
SD_GPT_SRV 3b8f8425-20e0-4f3b-907f-1a25a76f98e8 پارتیشن داده‌های سرور /srv/ نخستین پارتیشن با این UUID نوع روی همان دیسک پارتیشن ریشه، در /srv/ سوار می‌شود.
SD_GPT_VAR 4d21b016-b534-45c2-a9fb-5c16e091fd2d پارتیشن داده‌های متغیر /var/ نخستین پارتیشن با این UUID نوع روی همان دیسک پارتیشن ریشه، در /var/ سوار می‌شود — به شرطی که UUID پارتیشن آن با ۱۲۸ بیت نخست HMAC-SHA256 از نوع uuid GPT این پارتیشن با کلید شناسه ماشین نصب ذخیره‌شده در machine-id(5) مطابقت داشته باشد. این مقدار را می‌توان با استفاده از systemd-id128(1) تولید کرد.
SD_GPT_TMP 7ec6f557-3bc5-4aca-b293-16ef5df639d1 پارتیشن داده‌های موقت /var/tmp/ نخستین پارتیشن با این UUID نوع روی همان دیسک پارتیشن ریشه، در /var/tmp/ سوار می‌شود.
SD_GPT_SWAP 0657fd6d-a4ab-43c4-84e5-0933c84b4f4f سوآپ (Swap) ناموجود تمام پارتیشن‌های دارای این UUID نوع روی همان دیسک پارتیشن ریشه، به عنوان سوآپ استفاده می‌شوند.
SD_GPT_ESP c12a7328-f81f-11d2-ba4b-00a0c93ec93b پارتیشن سیستم EFI (ESP) /efi/ یا /boot/ پس از انتقال سیستم از initrd، و /sysefi/ پیش از آن نخستین پارتیشن با این UUID نوع واقع بر روی همان دیسک پارتیشن ریشه، در /boot/ یا /efi/ سوار می‌شود؛ به ادامه متن مراجعه کنید.
SD_GPT_XBOOTLDR bc13c2ff-59e6-4262-a352-b275fd6f7172 پارتیشن بارگذار بوت توسعه‌یافته /boot/ نخستین پارتیشن با این UUID نوع واقع بر روی همان دیسک پارتیشن ریشه، در /boot/ سوار می‌شود؛ به ادامه متن مراجعه کنید.

این تولیدکننده فلگ‌های ویژگی (attribute flags) زیر را برای پارتیشن‌ها درک می‌کند:

Table 2. Partition Attribute Flags

فلگ مقدار قابل اعمال روی توضیحات
SD_GPT_FLAG_READ_ONLY 0x1000000000000000 /، /home/، /srv/، /var/، /var/tmp/، پارتیشن بارگذار بوت توسعه‌یافته پارتیشن به‌صورت فقط‌خواندنی سوار می‌شود
SD_GPT_FLAG_NO_AUTO 0x8000000000000000 /، /home/، /srv/، /var/، /var/tmp/، پارتیشن بارگذار بوت توسعه‌یافته پارتیشن به‌طور خودکار سوار نمی‌شود
SD_GPT_FLAG_NO_BLOCK_IO_PROTOCOL 0x0000000000000002 پارتیشن سیستم EFI (ESP) پارتیشن به‌طور خودکار سوار نمی‌شود

پارتیشن‌های
/home/، /srv/، /var/، /var/tmp/ و سوآپ ممکن است با قالب LUKS رمزنگاری شده باشند. در این حالت، یک دستگاه device mapper با نام‌های /dev/mapper/home، /dev/mapper/srv، /dev/mapper/var، /dev/mapper/tmp یا /dev/mapper/swap راه‌اندازی می‌شود. توجه داشته باشید اگر همان پارتیشن در /etc/crypttab با نام دستگاه دیگری فهرست شده باشد، این امر ممکن است تداخل ایجاد کند.

هنگامی که systemd در initrd اجرا می‌شود، پارتیشن / نیز ممکن است با LUKS رمزنگاری شده باشد. در این حالت، یک دستگاه device mapper تحت نام /dev/mapper/root راه‌اندازی شده و یک sysroot.mount تنظیم می‌شود که دستگاه را زیر /sysroot سوار می‌کند. برای اطلاعات بیشتر، به bootup(7) مراجعه کنید.

واحدهای سوار کردن (mount) و سوار کردن خودکار (automount) برای پارتیشن سیستم EFI (ESP) و پارتیشن بارگذار بوت توسعه‌یافته (XBOOTLDR) روی سیستم‌های EFI تولید می‌شوند. اگر دیسک حاوی یک پارتیشن XBOOTLDR باشد (طبق تعریف در UAPI.1 Boot Loader Specification[4])، در /boot/ در دسترس قرار می‌گیرد. این تولیدکننده یک واحد automount ایجاد می‌کند؛ عمل سوار کردن فقط در صورت دسترسی و به‌صورت درخواستی (on-demand) فعال خواهد شد. در صورت نیاز، نقطه سوار کردن ایجاد می‌شود.

پارتیشن ESP در صورتی که دایرکتوری /boot/ برای XBOOTLDR استفاده نشده باشد در /boot/ سوار می‌شود، و در غیر این صورت در /efi/. مشابه /boot/، یک واحد automount استفاده می‌شود. در صورت نیاز، نقطه سوار کردن ایجاد می‌شود. این موارد پس از انتقال سیستم از فاز initrd اعمال می‌گردند. قبل از آن، اگر مؤلفه‌های موجود در initrd به دسترسی ESP نیاز داشته باشند، در /sysefi/ سوار خواهد شد.

برای نقاط سوار کردنی که در fstab(5) پیکربندی شده‌اند یا زمانی که دایرکتوری مقصد حاوی فایل است، هیچ پیکربندی‌ای ایجاد نمی‌شود.

هنگام استفاده از این تولیدکننده در ارتباط با سیستم‌های فایل btrfs، با استفاده از btrfs subvolume set-default مطمئن شوید که زیرحجم‌های پیش‌فرض صحیح را روی آن‌ها تنظیم کرده‌اید.

اگر سیستم از طریق systemd-stub(7) بوت شده باشد و stub به فضای کاربری گزارش دهد که ایمیج هسته در یک TPM2 PCR اندازه‌گیری شده است، آنگاه هر شناسه حجم ریشه و /var/ کشف‌شده (و کلیدهای رمزنگاری حجم، در صورتی که رمزنگاری شده باشند) به‌طور خودکار هنگام فعال‌سازی از طریق systemd-pcrfs@.service(8) در PCR 15 اندازه‌گیری خواهند شد. علاوه بر این، اطلاعات مربوط به شیار کلید LUKS استفاده‌شده برای باز کردن قفل حجم در NvPCR با عنوان "cryptsetup" اندازه‌گیری می‌شود. در نهایت، اگر پارتیشن ریشه یا /usr/ از طریق Verity محافظت شده باشد، هش ریشه آن و شماره سریال/صادرکننده کلید استفاده‌شده برای امضای هش ریشه ارائه‌شده (در صورت وجود) در NvPCR با عنوان "verity" اندازه‌گیری می‌شوند.

متادیتای محدودیت سوار کردن (mount constraint) موجود در سیستم‌های فایل، با فراخوانی systemd-validatefs@.service(8) برای نقاط سوار کردن ایجادشده اعتبارسنجی می‌شود.

systemd-gpt-auto-generator سند systemd.generator(7) را پیاده‌سازی می‌کند.

systemd-gpt-auto-generator پارامترهای خط فرمان هسته زیر را درک می‌کند:

systemd.gpt_auto, rd.systemd.gpt_auto

این گزینه‌ها یک آرگومان بولی اختیاری می‌گیرند و مقدار پیش‌فرض آن‌ها yes است. این تولیدکننده به‌طور پیش‌فرض فعال است و می‌توان از یک مقدار نادرست (false) برای غیرفعال کردن آن استفاده کرد (مانند "systemd.gpt_auto=0").

در نسخه 242 اضافه شد.

systemd.image_policy=

یک رشته خط‌مشی کالبدشکافی ایمیج (image dissection policy) را به عنوان آرگومان می‌گیرد (مطابق با systemd.image-policy(7))، و امکان اعمال یک خط‌مشی را بر روی کالبدشکافی و استفاده از ورودی‌های جدول پارتیشن GPT که به‌طور خودکار شناسایی شده‌اند فراهم می‌کند.

توجه داشته باشید که خط‌مشی ایمیج مشخص‌شده برای شناسایی خودکار سیستم فایل ریشه یا /usr/ در نظر گرفته نمی‌شود مگر اینکه root=dissect/mount.usr=dissect (یا root=dissect-force) مشخص شده باشند. (این خط‌مشی همیشه برای سایر انواع پارتیشن‌های قابل شناسایی خودکار اعمال خواهد شد.)

در نسخه 254 اضافه شد.

systemd.image_filter=

یک رشته فیلتر کالبدشکافی ایمیج (image dissection filter) را به عنوان آرگومان می‌گیرد (مطابق با systemd.image-filter(7))، و امکان اعمال مجموعه‌ای از الگوهای تطبیق (globbing) را بر روی تطبیق پارتیشن‌های ورودی‌های جدول پارتیشن GPT که به‌طور خودکار شناسایی شده‌اند فراهم می‌کند.

توجه داشته باشید که فیلتر ایمیج مشخص‌شده برای شناسایی خودکار سیستم فایل ریشه یا /usr/ در نظر گرفته نمی‌شود مگر اینکه root=dissect/mount.usr=dissect (یا root=dissect-force) مشخص شده باشند. (این فیلتر همیشه برای سایر انواع پارتیشن‌های قابل شناسایی خودکار اعمال خواهد شد.)

در نسخه 258 اضافه شد.

root=, rootfstype=, rootflags=

هنگامی که root= با مقدار ویژه "gpt-auto" استفاده شود، شناسایی خودکار پایه‌ای پارتیشن ریشه بر اساس نوع پارتیشن GPT فعال می‌گردد. در صورتی که حالت بازنشانی کارخانه‌ای (factory reset) در طول بوت فعلی فعال باشد، استفاده از پارتیشن ریشه تا زمان خروج از این حالت به تعویق می‌افتد. برای اطلاعات بیشتر در این مورد، به Factory Reset[5] مراجعه کنید. اگر "gpt-auto-force" مشخص شده باشد، شناسایی خودکار پارتیشن ریشه با نادیده گرفتن هرگونه حالت بازنشانی کارخانه‌ای فعال می‌شود.

اگر root= روی مقدار ویژه "dissect" تنظیم شود، شناسایی خودکار کامل پارتیشن ریشه بر اساس اطلاعات پارتیشن GPT فعال می‌گردد. این یک ابرمجموعه از root=gpt-auto است، زیرا پارتیشن‌های Verity (شامل راه‌اندازی مبتنی بر امضا) را به‌طور خودکار بر اساس منطق تعریف‌شده برای آن در UAPI.2 Discoverable Partitions Specification[6] پیکربندی می‌کند. علاوه بر این، خط‌مشی و فیلتر ایمیج پیکربندی‌شده را برای تمام انواع پارتیشن، از جمله سیستم فایل ریشه در نظر می‌گیرد. گزینه "root=dissect" در صورت فعال بودن فاز بازنشانی کارخانه‌ای، قبل از فعال‌سازی سیستم فایل ریشه منتظر تکمیل آن فاز می‌ماند. از "root=dissect-force" برای نادیده گرفتن فاز بازنشانی کارخانه‌ای و فعال‌سازی فوری سیستم فایل ریشه استفاده کنید.

هر مقدار دیگر (یعنی به جز "gpt-auto"، "gpt-auto-force"، "dissect"، "dissect-force") شناسایی خودکار سیستم فایل ریشه را غیرفعال می‌کند.

اگر root= به‌طور کلی در خط فرمان هسته مشخص نشده باشد، شناسایی خودکار پارتیشن ریشه از طریق ESP گزارش‌شده توسط بارگذار بوت نیز فعال می‌شود (با در نظر گرفتن وضعیت بازنشانی کارخانه‌ای، یعنی معادل با "root=gpt-auto")؛ با این حال در این حالت، شناسایی مبتنی بر فیلد ".lo_name" دستگاه بلوکی لوپ‌بک فعال نمی‌شود.

گزینه‌های rootfstype= و rootflags= برای انتخاب نوع سیستم فایل و گزینه‌های آن در زمان شناسایی خودکار سیستم فایل ریشه استفاده می‌شوند.

در نسخه 242 اضافه شد.

mount.usr=, mount.usrfstype=, mount.usrflags=

مشابه root=، rootfstype=، rootflags= (در بالا)، اما در عوض برای پارتیشن /usr/ اعمال می‌شود. توجه داشته باشید که تنظیمات "gpt-auto"، "gpt-auto-force"، "dissect-force" که root= درک می‌کند، توسط mount.usr= پشتیبانی نمی‌شوند (اگرچه "dissect" پشتیبانی می‌شود).

همچنین توجه داشته باشید که شناسایی خودکار پارتیشن برای /usr/ باید به‌طور صریح فعال شود، برخلاف شناسایی برای سیستم فایل ریشه که در صورت عدم ارسال هیچ پارامتر root= نیز فعال است.

در نسخه 258 اضافه شد.

rw, ro

پارتیشن ریشه را در ابتدا به‌صورت خواندنی-نوشتنی یا فقط‌خواندنی سوار می‌کند.

توجه داشته باشید که برخلاف اکثر گزینه‌های خط فرمان هسته، این تنظیمات پیکربندی درون سیستم فایل را لغو نمی‌کنند و ممکن است سیستم فایل بعداً مجدداً سوار شود (remount). به systemd-remount-fs.service(8) مراجعه کنید.

در نسخه 242 اضافه شد.

systemd.swap=

یک آرگومان بولی می‌گیرد یا اگر بدون آرگومان مشخص شود، گزینه را فعال می‌کند. در صورت غیرفعال بودن، شناسایی خودکار پارتیشن(های) سوآپ بر اساس نوع پارتیشن GPT غیرفعال می‌شود. به‌طور پیش‌فرض فعال است.

در نسخه 254 اضافه شد.

systemd(1), systemd.mount(5), systemd.swap(5), systemd-fstab-generator(8), systemd-cryptsetup@.service(8), systemd-pcrfs@.service(8), systemd-validatefs@.service(8), machine-id(5), cryptsetup(8), fstab(5), btrfs(8)

1.
UEFI Specification
2.
UAPI.2 Discoverable Partitions Specification
3.
Boot Loader Interface
4.
UAPI.1 Boot Loader Specification
5.
Factory Reset
6.
UAPI.2 Discoverable Partitions Specification
systemd 261.2