Автоматическое монтирование разделов с помощью fstab

Thank you for reading this post, don't forget to subscribe!

В про­цес­се рабо­ты с опе­ра­ци­он­ной систе­мой (ОС) поль­зо­ва­те­лю неред­ко при­хо­дит­ся под­клю­чать раз­лич­ные устрой­ства хра­не­ния. Это могут быть жёст­кие дис­ки (пере­нос­ные или с дру­го­го ком­пью­те­ра), Flash/M2-нако­пи­те­ли, при­во­ды опти­че­ских дис­ков и т. д. Неко­то­рые такие устрой­ства под­клю­ча­ют­ся (в Linux мон­ти­ру­ют­ся) вруч­ную, а неко­то­рые — авто­ма­ти­че­ски. Чаще все­го те устрой­ства, кото­рые необ­хо­ди­мо под­клю­чать авто­ма­ти­че­ски, опре­де­ля­ют­ся ещё на эта­пе уста­нов­ки систе­мы. Одна­ко, неред­ко нуж­но настро­ить воз­мож­ность авто­ма­ти­че­ско­го мон­ти­ро­ва­ния в Linux вновь добав­лен­но­го устрой­ства, напри­мер дис­ка для хра­не­ния регу­ляр­но созда­ва­е­мых резерв­ных копий. В этом слу­чае необ­хо­ди­мо сде­лать неко­то­рые изме­не­ния в кон­фи­гу­ра­ци­он­ных фай­лах. Это поз­во­лит систе­ме ини­ци­а­ли­за­ции началь­ной загруз­ки систе­мы «узнать» об авто­ма­ти­че­ски мон­ти­ру­е­мых устройствах.

Немного о том, как происходит монтирование

Мон­ти­ро­ва­ние фай­ло­вой систе­мы — это один из обя­за­тель­ных эта­пов началь­ной загруз­ки Linux. Мон­ти­ро­ва­ние необ­хо­ди­мо для того, что­бы собрать фай­ло­вую систе­му (ФС) из отдель­ных её ком­по­нен­тов в еди­ное дере­во ката­ло­гов, име­ю­щее один корень. В Linux нет поня­тия «диск» как тако­во­го. Это физи­че­ский уро­вень, отоб­ра­жа­е­мый в общее дере­во фай­ло­вой систе­мы через дру­гие фай­ло­вые систе­мы, свя­зан­ные, напри­мер, с раз­де­ла­ми дис­ков и под­клю­ча­е­мые через точ­ки монтирования.

Напри­мер, один из раз­де­лов устрой­ства хра­не­ния (дис­ка) может быть смон­ти­ро­ван как «/home». Эта запись обо­зна­ча­ет точ­ку мон­ти­ро­ва­ния ФС с домаш­ни­ми ката­ло­га­ми поль­зо­ва­те­лей систе­мы. Здесь сим­вол «/» ука­зы­ва­ет, что к обще­му кор­ню (к кор­не­вой ФС) под­клю­че­на дру­гая ФС с име­нем «home». А она в свою оче­редь при­вя­за­на к како­му-либо из раз­де­лов на устрой­стве хранения.

Мон­ти­ро­ва­ние в Linux выпол­ня­ет коман­да mount. Она вызы­ва­ет­ся систе­мой ини­ци­а­ли­за­ции (такой напри­мер, как Systemd), но так­же широ­ко исполь­зу­ет­ся для руч­но­го под­клю­че­ния устройств.

Кон­фи­гу­ра­ци­он­ным фай­лом, хра­ня­щим настрой­ки под­клю­че­ния устройств явля­ет­ся /etc/fstab. Систе­ма ини­ци­а­ли­за­ции при запус­ке систе­мы обра­ща­ет­ся к это­му фай­лу, что­бы смон­ти­ро­вать ФС соглас­но ука­зан­ным в нём настрой­кам. Содер­жи­мое фай­ла /etc/fstab – это спи­сок тек­сто­вых строк, каж­дой из кото­рых соот­вет­ству­ет раз­дел на устрой­стве, кото­рый необ­хо­ди­мо при­мон­ти­ро­вать с опре­де­лён­ны­ми пара­мет­ра­ми, ука­зан­ны­ми в этой стро­ке. Пра­ви­ла запи­си этих строк соот­вет­ству­ют опре­де­лён­но­му (и неслож­но­му) синтаксису.

Синтаксис записей в файле fstab

Сна­ча­ла может пока­зать­ся, что запись для стро­ки мон­ти­ро­ва­ния доволь­но слож­на. Одна­ко, при более при­сталь­ном раз­бо­ре такой стро­ки ста­но­вит­ся оче­вид­ным назна­че­ние её ком­по­нен­тов. Запи­си под­чи­ня­ют­ся сле­ду­ю­ще­му синтаксису:

Соглас­но это­му син­так­си­су рабо­чая стро­ка мон­ти­ро­ва­ния устрой­ства может выгля­деть, напри­мер, сле­ду­ю­щим образом:

Самым слож­ным для вос­при­я­тия ком­по­нен­том в такой запи­си явля­ет­ся «устрой­ство», посколь­ку пред­став­ля­ет собой целое выра­же­ние. В дан­ном слу­чае это «UUID=7dac48f7-9891-4e5d-abe9-1332d860183e», что озна­ча­ет ничто иное как иден­ти­фи­ка­тор устрой­ства (UUID) в систе­ме, кото­рый поня­тен ядру. Далее следуют:

  • /opt – точ­ка мон­ти­ро­ва­ния, кото­рая зада­ёт­ся «вет­вью» — т. е. допол­ни­тель­ной ФС, вклю­ча­е­мой в кор­не­вую ФС и кро­ме /opt, конеч­но же могут быть и дру­гие — /home, /var, /etc и т. д.;
  • ext4 – тип фай­ло­вой систе­мы, в каче­стве кото­рой могут быть любые дру­гие — ext2, ext4, btrfs и т. д.;
  • defaults – опции мон­ти­ро­ва­ния ФС устрой­ства по умолчанию;
  • 0 — созда­ние резерв­ной копии раз­де­ла отклю­че­но, для вклю­че­ния необ­хо­ди­мо ука­зы­вать 1;
  • 2 — про­вер­ка устрой­ства на нали­чие оши­бок во вто­рую оче­редь (0 — отклю­че­но), для пер­вой и тре­тьей необ­хо­ди­мо ука­зы­вать 1 и 3 соот­вет­ствен­но и т. д.

Важ­но заме­тить, что в Linux в каче­стве иден­ти­фи­ка­то­ра устрой­ства может высту­пать как UUID (уни­вер­саль­ный иден­ти­фи­ка­тор устрой­ства), так и имя устрой­ства, напри­мер /dev/sda/dev/sdb1 и т. д. Реко­мен­ду­ет­ся исполь­зо­вать имен­но UUID, посколь­ку этот иден­ти­фи­ка­тор явля­ет­ся по-насто­я­ще­му уни­каль­ным и жест­ко при­вя­зан к кон­крет­но­му устрой­ству. А вот одно имя устрой­ства может соот­вет­ство­вать раз­ным устрой­ствам, хотя и не одно­вре­мен­но, но всё же необ­хо­ди­мо иметь это вви­ду во избе­жа­ние кон­флик­тов и пута­ни­цы при обновлении/изменении кон­фи­гу­ра­ции систе­мы и/или подключении/отключении новых устройств. Узнать UUID для заре­ги­стри­ро­ван­ных в систе­ме устройств (соот­вет­ствен­но их наиме­но­ва­ни­ям) поз­во­ля­ет коман­да blkid, выпол­нен­ная от име­ни суперпользователя:

Сто­ит уде­лить осо­бое вни­ма­ние опци­ям мон­ти­ро­ва­ния устройств, посколь­ку их набор доволь­но раз­но­об­ра­зен и поз­во­ля­ет доволь­но гиб­ко зада­вать раз­лич­ные режи­мы под­клю­че­ния и рабо­ты устройств. В сле­ду­ю­щей таб­ли­це при­ве­де­ны наи­бо­лее часто исполь­зу­е­мые из них:

Опции fstab

Опция Зна­че­ние
exec Раз­ре­ша­ет запус­кать испол­ня­е­мые файлы.
noexec Запре­ща­ет запус­кать испол­ня­е­мые файлы.
auto Авто­ма­ти­че­ское мон­ти­ро­ва­ние раз­де­ла устрой­ства при стар­те системы.
noauto Запре­тить авто­ма­ти­че­ское мон­ти­ро­ва­ние раз­де­ла устрой­ства при стар­те системы.
rw Раз­ре­шить чтение/запись.
ro Раз­ре­шить толь­ко чтение.
nouser Не раз­ре­шать обыч­ным поль­зо­ва­те­лям выпол­нять монтирование/демонтирование устройств.
user Раз­ре­шить обыч­ным поль­зо­ва­те­лям выпол­нять монтирование/демонтирование устройств.
sw (swap) Раз­ре­шить под­кач­ку для раздела.
async Вклю­чить асин­хрон­ный ввод/вывод. При этом дей­ствия с раз­де­лом (копи­ро­ва­ние, уда­ле­ние и т. д.) будут про­ис­хо­дить не сра­зу по коман­де, а в опре­де­лён­ное вре­мя, чуть поз­же, по усмот­ре­нию систе­мы. Дан­ная опция исполь­зу­ет­ся для оптимизации/распределения нагрузки.
sync Вклю­чить син­хрон­ный ввод/вывод.
suid Раз­ре­шить рабо­ту SUID и SGID битов.
nosuid Запре­тить  рабо­ту SUID и SGID битов.
iocharset=koi8-r

codepage=866

Вклю­чить под­держ­ку коди­ров­ки KOI8-R для назва­ний фай­лов и каталогов.
errors=remount-ro При воз­ник­но­ве­нии оши­бок выпол­нять пере­мон­ти­ро­ва­ние с опци­ей ro.
notail Запре­тить хра­нить неболь­шие по объ­ё­му фай­лы в кон­це боль­ших. Исполь­зу­ет­ся для повы­ше­ния производительности.
atime Выпол­нять запись вре­ме­ни послед­не­го досту­па к файлу.
noatime Отклю­чить запись вре­ме­ни послед­не­го досту­па к фай­лу. Не реко­мен­ду­ет­ся исполь­зо­вать, посколь­ку мно­гим при­ло­же­ни­ям для кор­рект­ной рабо­ты эти дан­ные необ­хо­ди­мы. Сле­ду­ет исполь­зо­вать эту опцию толь­ко для раз­де­лов, для кото­рых не преду­смат­ри­ва­ет­ся про­вер­ка вре­ме­ни послед­не­го досту­па к фай­лам и необ­хо­ди­мо суще­ствен­но уве­ли­чить про­из­во­ди­тель­ность рабо­ты с диском.
relatime Вклю­чить «лояль­ный» режим запи­си вре­ме­ни послед­не­го досту­па к фай­лу. Запись будет про­из­во­дить­ся толь­ко если преды­ду­щее вре­мя досту­па явля­ет­ся более ран­ним, чем теку­щее вре­мя изме­не­ния файла.
defaults Вклю­чить все опти­маль­ные пара­мет­ры по-умол­ча­нию: exec, auto, rw, nouser, async, nosuid, atime.

Так­же сле­ду­ет подроб­нее рас­смот­реть типы ФС, исполь­зу­е­мых при мон­ти­ро­ва­нии. Нуж­но пред­став­лять, для каких типов устройств мож­но исполь­зо­вать тот или тип ФС. Например:
Жест­кие диски:

  • NTFS;
  • XFS;
  • FAT32;
  • VFAT;
  • EXT2/EXT3/EXT4.

При­во­ды CD/DVD:

  • UDF;
  • ISO9669
  • auto – может рас­по­зна­вать­ся автоматически.

Нако­пи­тель USB-Flash:

  • VFAT;
  • FAT32;
  • NTFS;
  • auto.

Сле­ду­ет отме­тить, что не смот­ря на то, что все выше­пе­ре­чис­лен­ные пара­мет­ры при­во­дят­ся в стан­дарт­ном напи­са­нии, т. е. заглав­ны­ми сим­во­ла­ми, одна­ко запи­сы­вать их непо­сред­ствен­но в стро­ке мон­ти­ро­ва­ния необ­хо­ди­мо строч­ны­ми символами.

Примеры

Пусть тре­бу­ет­ся скон­фи­гу­ри­ро­вать авто­ма­ти­че­ское мон­ти­ро­ва­ние како­го-либо раз­де­ла. Для нача­ла необ­хо­ди­мо опре­де­лить нуж­ный раз­дел, а так­же его UUID:

Если нужен, к при­ме­ру раз­дел /dev/sdb1, то соот­вет­ству­ю­щим UUID явля­ет­ся «af882c18-2cd4». Далее сле­ду­ет открыть файл /etc/fstab в тек­сто­вом редак­то­ре (напри­мер nano) от име­ни суперпользователя

и доба­вить в него стро­ку кон­фи­гу­ра­ции для тре­бу­е­мо­го раз­де­ла, вне­ся в неё пара­мет­ры и опции в соот­вет­ствии с син­так­си­сом из преды­ду­щей гла­вы, напри­мер такие:

Теперь при стар­те систе­мы раз­дел /dev/sdb1 будет мон­ти­ро­вать­ся авто­ма­ти­че­ски и, соот­вет­ствен­но, сра­зу готов к использованию.
Если нуж­но авто­ма­ти­че­ски мон­ти­ро­вать дру­гой тип устрой­ства, напри­мер CD/DVD, то стро­ка кон­фи­гу­ра­ции для него будет при­мер­но следующей:

Здесь вме­сто /dev/cdrom мож­но ука­зы­вать так­же и /dev/sr0, если это пер­вый и/или един­ствен­ный опти­че­ский при­вод в системе.