برای دسترسی به درایوها در لینوکس باید اونها رو اصطلاحا mount کنیم. یعنی یک فولدر بسازیم و به سیستم عامل بگیم که درایو مورد نظر ما رو داخلش نشون بده. برای اینکه این کار حین بوت انجام بشه، به طور سنتی از فایل /etc/fstab
استفاده میکردیم.
اما با ظهور systemd و رفتن توزیع ها به سمت اون، تغییرات جدیدی در نحوه مدیریت خیلی چیزها از جمله ماونت کردن درایو ها ایجاد شد. systemd فایل fstab رو موقع بوت بررسی میکنه و به ازای هر ردیفی که داخلش وجود داره یک یونیت mount درست میکنه و سپس درایو مورد نظر ماونت میشه.
چرا ما از اول خودمون این یونیت ها رو آماده نکنیم؟ که دیگه systemd مجبور نباشه در هر بوت اونها رو تولید کنه و بعد ماونت کنه؟ در این نوشته میخوام بگم من چطوری پارتیشن مورد نظرم رو با استفاده از systemd موقع بوت ماونت میکنم و دیگه توی fstab ردیفی برای اون قرار ندادم.
استفاده از systemd برای ماونت این فواید رو داره:
قبل از هرچیز مشخص کنید درایو مورد نظر شما چه مشخصاتی داره؟ با دستور زیر لیستی از پارتیشن ها رو میبینید:
$ sudo blkid
مقدار UUID برای پارتیشن مورد نظرتون رو یک جا کپی کنید و داشته باشید. و فرمت پارتیشن رو هم که در قسمت TYPE میگه در نظر داشته باشید.
تصمیم بگیرید فولدری که قراره پارتیشن شما در اون ماونت بشه کجاست؟ توصیه شده از مسیرهای /media
و /run
و حتی /mnt
استفاده نکنید. مثلا من مسیر /data/sdb
رو برای ماونت کردن هارد دیسک دیتای خودم (که یک پارتیشن بیشتر نیست) ایجاد کردم. شما هم میتونید یک فولدر به نام data در مسیر روت یعنی /
بسازید و برای هر درایو یا پارتیشنی که دارید داخلش فولدرهای مورد نظرتون رو ایجاد کنید. مثلا sdb1 یا sdb2 یا هر اسم دیگه ای.
حالا باید در مسیر /etc/systemd/system
یک یونیت با پسوند .mount
ایجاد کنیم. منتها نام این یونیت باید دقیقا متناظر با مسیر فولدر ماونت باشه. مثلا برای مسیر /data/sdb
نام این فایل میشه data-sdb.mount
یا اگر مثلا اینطوری ساختید: /mnt/hdd/driveD
اسم یونیت شما میشه mnt-hdd-driveD.mount
محتوای یونیت ماونت شامل چند قسمت هست. به مثال زیر توجه کنید:
[Unit] Description=Mount HDD [Mount] What=/dev/disk/by-uuid/42EEF8E5EEF8D261 Where=/data/sdb Type=ntfs3 Options=nosuid,nodev,nofail,defaults,rw,noatime,prealloc,nohidden,windows_names,x-gvfs-hide [Install] WantedBy=local-fs.target
قسمت [mount]
که مشخص میکنیم چه چیزی What=
در کجا Where=
و با چه مشخصاتی Type=
و Options=
ماونت بشه.
و قسمت [Install]
هم که در همه یونیت ها وجود داره تا مشخص کنیم چه زمانی یونیت مورد نظر ما فعال بشه.
بنابراین طبق الگوی بالا، برای هر پارتیشنی که مد نظر دارید با توجه به مشخصات خودش، فایل یونیتش رو ایجاد کنید و ذخیره کنید.
در نهایت با دستور زیر یک بار پارتیشن رو ماونت کنید تا مطمئن بشید همه چیز درسته:
sudo systemctl start UNIT-NAME.mount
و اگر مشکلی وجود نداشت، سرویس رو فعال کنید:
sudo systemctl enable UNIT-NAME.mount
یادتون نره که ردیف مربوط رو از fstab بردارید یا کامنتش کنید. ( یه # در ابتدای خطش بگذارید)
در مورد متغیرهای مربوط به فرمت پارتیشن مورد نظرتون، میتونید جست و جو کنید. من برای پارتیشن با فرمت NTFS از درایور خود کرنل (ntfs3) استفاده میکنم و متغیرهایی که در خط Options میبینید رو قرار دادم. ممکنه شما از ntfs-3g استفاده میکنید و متغیرها اندکی متفاوت باشند. یا از vfat حتی.
ممکنه شما نیاز نداشته باشید که پارتیشن مورد نظر شما موقع هر بوت، ماونت بشه. و این رو هم نمیخواید که هر بار که لازمش داشتید از خط فرمان با دستور mount اون رو ماونت کنید. و میخواید این کار رو به سیستم بسپرید. یعنی مثلا وقتی به فولدری در مسیر خاصی رفتید، پارتیشن شما بطور خودکار در اون مسیر ماونت بشه. جالبه نه؟ این طوری برای ماونت شدن هارد درایو حین بوت زمانی تلف نمیشه.
برای این کار باید یک تغییری در یونیت mount بدیم و یک یونیت automount هم ایجاد کنیم.
خط Where رو از یونیت mount حذف کنید. (میتونید هم حذف نکنید. ولی چون در automount باید بیاریمش دیگه ضرورتی نداره توی mount هم بیاریم).
یونیت automount رو با همون نام یونیت mount بسازید و محتوایی رو مطابق با الگوی زیر در اون قرار بدید:
[Unit] Description=Mount HDD by demand ConditionPathExists=/data/sdb [Automount] Where=/data/sdb TimeoutSec=5 [Install] WantedBy=multi-user.target
اگر یونیت mount رو enable کرده بودید، اون رو stop و سپس disable کنید. و بعد یونیت automount رو start کنید و تست کنید آیا بعد از رفتن به دایرکتوری مورد نظر شما، پارتیشن ماونت میشه یا نه، اگر مشکلی نبود اون رو enable کنید.
با ترکیب های مختلفی میشه ایده های متفاوتی رو پیاده کرد. مثلا اگه شما یک هارد درایو اکسترنال یا فلش مموری دارید و میخواید هر وقت که اون رو وصل کردید در یک مسیر خاصی ماونت بشه، این یونیت ها میتونن به شما کمک کنن.
برای مطالعه بیشتر میتونید به این فروم و man page مراجعه کنید. اینجا هم روش های دیگه ای رو برای پیدا کردن مشخصات درایوها نوشته.
حاصل سر و کله زدن های من با لینوکس