معماری ذخیرهسازی، اتصال و LVM
در این درس ۴ بخش
محیط تمرین: ماشین مجازی شخصی با Ubuntu 24.04 LTS، پوستهٔ Bash و ابزارهای util-linux؛ حساب معمولی، مسیر HOME بدون فاصله یا tab و فضای اندکی در آن کافی است. بخش مشاهده روی بسیاری از توزیعهای دیگر هم اجرا میشود، ولی نام دستگاهها و چیدمانشان متفاوت است. هدف، تشخیص لایهٔ مشکل پیش از هر تغییر است: اگر پوشهٔ داده خالی شد، آیا فایلها حذف شدهاند یا فایلسیستم موردنظر متصل نیست؟ هیچ دیسکی در این درس پارتیشنبندی یا قالببندی نمیشود.
از دستگاه تا مسیر فایل
دستگاه بلوکی مانند دیسک مجازی، بایتها را به صورت بلوک عرضه میکند. پارتیشن، محدودهای تعریفشده روی دستگاه است؛ فایلسیستم ساختاری مانند ext4 یا XFS برای نامها، پوشهها و فراداده است. mount آن ساختار را در نقطهای از درخت مسیرها قابل دسترس میکند. اینها یک مفهوم نیستند: یک فایلسیستم میتواند مستقیماً روی دستگاه، روی پارتیشن یا روی حجم منطقی قرار گیرد. فضای آزاد داخل فایلسیستم نیز با فضای تخصیصنیافتهٔ دیسک برابر نیست.
lsblk -f
lsblk --output NAME,TYPE,SIZE,FSTYPE,UUID,MOUNTPOINTS
findmnt --target "$HOME" --output TARGET,SOURCE,FSTYPE,OPTIONS
findmnt --fstab --output SOURCE,TARGET,FSTYPE,OPTIONSاین فرمانها اطلاعات را میخوانند. lsblk وابستگی دستگاهها را نشان میدهد؛ findmnt مشخص میکند مسیر فعلی واقعاً روی کدام فایلسیستم قرار دارد. خروجی ثابت و مشترکی برای همه نداریم: ممکن است HOME بخشی از ریشه باشد یا منبعی از نوع overlay دیده شود. برای گزارش قابل تکرار، ستونها را صریح انتخاب کنید. نبودن FSTYPE یا UUID بهتنهایی مجوز ساخت فایلسیستم نیست؛ دستگاه میتواند عضو LVM، رمزنگاری یا لایهای دیگر باشد و برخی اطلاعات برای حساب معمولی در دسترس نباشد.
fstab، قرارداد اتصال پس از راهاندازی
هر سطر fstab معمولاً شش میدان دارد: منبع، مسیر اتصال، نوع فایلسیستم، گزینهها، مقدار dump و ترتیب بررسی fsck. UUID شناسهٔ فایلسیستم است؛ PARTUUID شناسهٔ پارتیشن است. نامی مانند /dev/sdb ممکن است با ترتیب شناسایی عوض شود، بنابراین UUID معمولاً انتخاب پایدارتر است؛ کلونها میتوانند شناسهٔ تکراری داشته باشند. فاصله در یک میدان باید با \040 نمایش داده شود. noauto یعنی اتصال خودکار معمول انجام نشود؛ nofail مشکل منبع را درمان نمیکند. برای آزمایش نحوی، فایل نمونهای مستقل میسازیم.
storage_lab=$(mktemp -d "$HOME/linux2-storage.XXXXXX") || exit 1
mkdir "$storage_lab/target"
printf 'tmpfs %s tmpfs noauto,nosuid,nodev,noexec,size=1m 0 0\n' \
"$storage_lab/target" > "$storage_lab/fstab.demo"
findmnt --verify --verbose --tab-file "$storage_lab/fstab.demo"
printf 'verify exit=%s\n' "$?"verify جدول جایگزین را بررسی میکند و چیزی mount نمیکند؛ فایل اصلی /etc/fstab نیز تغییر نمیکند. این نمونه از tmpfs و مسیر موجود استفاده میکند و در util-linux 2.39.3 بدون خطا بررسی شده است؛ عبارتهای خروجی با نسخه فرق میکنند. اگر نمونه را به UUID یا مسیر فرضی تغییر دهید، اخطارِ نبودن منبع یا مقصد طبیعی است؛ درستی دستور زبان، وجود منبع و موفقیت اتصال سه آزمون جدا هستند. حتی موفقیت این بررسی، اجرای موفق برنامه یا سلامت داده را تضمین نمیکند.
حجم منطقی، تخصیص نازک و snapshot
در LVM، یک physical volume یا PV فضای دستگاه را به مدیر حجم معرفی میکند؛ volume group یا VG مجموعهٔ فضا را تشکیل میدهد؛ logical volume یا LV بخشی قابل استفاده از آن است. فایلسیستم میتواند روی LV باشد و سپس mount شود. بزرگکردن LV لزوماً فایلسیستم را خودبهخود بزرگ نمیکند؛ هر لایه ابزار و محدودیت خودش را دارد. در thin provisioning ظرفیت ظاهری LVها میتواند بیشتر از ظرفیت واقعی thin pool باشد، چون بلوکها هنگام نیاز تخصیص مییابند. بنابراین اندازهٔ ظاهری بزرگ، فضای فیزیکی تضمینشده نیست.
Snapshot نمای یک لحظه است. snapshot معمولی LVM فضای تغییرات میخواهد؛ snapshot نازک ابتدا بلوکها را با مبدأ شریک است و تغییرات بلوکهای جدا میگیرند. مصرف داده و فرادادهٔ pool باید پایش شود؛ پُرشدن ظرفیت میتواند عملیات را مختل کند. Snapshot جای پشتیبان مستقل را نمیگیرد: خرابی همان ذخیرهساز ممکن است مبدأ و snapshot را با هم از بین ببرد. برای پایگاه دادهٔ فعال نیز سازگاری برنامهای نیازمند روش هماهنگشدهٔ همان برنامه است؛ عکسِ بلوکها الزاماً تراکنش کامل نمیسازد.
تمرین تشخیص و پاسخ
سناریوی کاغذی: دیروز /srv/data روی یک LV از نوع ext4 بود؛ امروز findmnt برای این مسیر، فایلسیستم ریشه را گزارش میکند و UUID ثبتشده در fstab میان دستگاههای قابل مشاهده نیست. آیا پوشه را با دادهٔ تازه پُر میکنید؟ پاسخ: ابتدا غیبت اتصال و زنجیرهٔ دستگاه، LV، فایلسیستم و UUID را بررسی میکنیم. نوشتن در پوشهٔ فعلی ممکن است دیسک ریشه را پُر کند و پس از اتصال زیر دادهٔ متصلشده پنهان شود. برای تحویل تمرین، لایهٔ محتمل، دو شاهد و یک پرسش باز بنویسید؛ صرف خالیبودن پوشه، حذف فایل را ثابت نمیکند.
rm -- "$storage_lab/fstab.demo"
rmdir -- "$storage_lab/target" "$storage_lab"منابع رسمی انگلیسی:
lsblk — util-linux: https://man7.org/linux/man-pages/man8/lsblk.8.html
findmnt — util-linux: https://man7.org/linux/man-pages/man8/findmnt.8.html
fstab — util-linux: https://man7.org/linux/man-pages/man5/fstab.5.html
LVM architecture — Red Hat: https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/configuring_and_managing_logical_volumes/overview-of-logical-volume-management
LVM snapshots — Red Hat: https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/configuring_and_managing_logical_volumes/advanced-logical-volume-management
تألیف و مثالهای اختصاصی: تحریریه درسآوند. منابع رسمی انگلیسی برای مطالعهٔ تکمیلی معرفی شدهاند.
متن درسهای عمومی را بدون ورود بخوانید.