Тайны монтирования

ArticleCategory:

UNIXBasics

AuthorImage:[Here we need a little image from you]

[Photo of the Author]

TranslationInfo:[Author + translation history. mailto: or http://homepage]

original in en Guido Socher

en to ru Pukhlyakov Kirill

AboutTheAuthor:[A small biography about the author]

Guido нравится Linux из-за сообщества. Это огромный проект, в котором трудятся люди со всего мира, чтобы сделать Linux лучше и делают они это каждый день.
К сожалению проект Linux сегодня настолько большой, что привлекает людей, которые хотят только получить прибыль, ничего не дав взамен. Осторожно! Они обычно появляются как "pro-linux", но они всего лишь заинтересованы в собственной прибыли.

Abstract:

В заметке рассматриваются вопросы монтирования дисков. Она должна быть интересна даже тем из вас кто знаком с ОС Linux.

ArticleIllustration:

mount

ArticleBody:

Введение

Сначала я расскажу об основах монтирования файловых систем, а затем рассмотрю более сложные возможности. Если вы чувствуете себя экспертом в области Linux - читайте немного ниже.

Как это работает

В настоящее время пользователи windows знакомы со следующей проблемой: добавление нового диска приводит к возникновению беспорядка в существующей последовательности обозначений. Например то, что было диском D: вдруг стало диском E:, вследствие чего и пользователи и программное обеспечение пребывают в недоумении.

Используя Unix вы никогда не столкнетесь с подобной проблемой, потому что все физические диски устанавливаются в дерево каталогов. Вы можете убедиться в этом, набрав команду "mount" или "df":
# df
Filesystem 1K-blocks    Used Available Use% Mounted on
/dev/hda1    9070728 4701180   3908768  55% /
/dev/hda3   24950428  683412  22999584   3% /home
none          257236       0    257236   0% /dev/shm

# mount
/dev/hda1 on / type ext3 (rw)
none on /proc type proc (rw)
none on /dev/shm type tmpfs (rw)
/dev/hda3 on /home type ext3 (rw)
Мы видим два раздела диска, один из которых содержит все кроме "/home". Это раздел "/" и физически он присоединен к hda1. hda1 - это первый раздел (1) первого ide диска (hda). Третий раздел (hda3) этого диска подмонтирован к "/home" Таким образом если вы обратитесь к "/home" вы получите доступ к файлам раздела hda3. Вам никогда не придется беспокоиться какая это буква - D:, E: или ???. Это всегда просто каталог и всегда один и тот же.

Проблема занятости файловой системы

ОС Linux помещает операции файловой системы по чтению и записи в буфер. Можно заметить это читая большой файл с usb (1.1) диска. Первый раз чтение занимает достаточно много времени, но повторное чтение того же самого файла происходит намного быстрее - лампочка на диске даже не мерцает.

Следствием такой возможности использования дисков является то, что вы не можете просто изъять используемый диск, необходимо его сначала размонтировать. Для обычных жестких дисков это не проблема для обсуждения, это касается cdrom приводов и USB дисков.

Предположим вы подмонтировали usb-stick в /mnt/usb и выполнили команду "cd /mnt/usb" - bash уже использует эту файловую систему. Если вы попробуете размонтировать это устройство из другого окна оболочки вы получите сообщение "file system busy" и размонтирование не будет выполнено. Чтобы решить эту проблему достаточно выполнить команду "cd" в /mnt/usb и тогда можно размонтировать. Иногда проблема может быть в том, что вы забыли кто использует эту файловую систему - открыто так много приложений, что это не удивительно.

Спросите компьютер!
# fuser -m -u /mnt/usb
/mnt/usb:   1347c(root)  1348c(guido)  1349c(guido)  
Команда выводит список процессов использующих файловую систему. Теперь командой "ps auxw" можно узнать что это или просто остановить эти процессы. После этого umount выполнит свою работу.

Но windows может это делать!?

Почему бы просто не вынуть usb-stick? Старые компьютеры с dos/win3.1 можно было просто отключить от питания. Не было никаких shutdown'ов. В то время некоторые мои знакомые жаловались, что перед отключением Linux от питания сначала надо было сделать shutdown. Затем появилась win95 и все эти разговоры прекратились - ей также надо было сначало выполнить shutdown и только потом выключать питание.

Linux тоже может это делать!

Для ОС Linux также есть решения позволяющие просто взять и вынуть диск ( например usb disk ). В дистрибутиве Mandrake это называется supermount - воспользовавшись вы получите такой же результат ( или проблемы ) как в windows. Не рекомендую вам пользоваться этим - возможны проблемы со стабильностью работы и не исключена потеря файлов.

Намного лучше пользоваться набором утилит mtools (http://mtools.linux.lu/) - это команды для доступа к дискетам, usb-stick'ам ... короче говоря любой носитель с файловой системой FAT. Исспользуя этот набор утилит вам не надо ничего монтировать.

Небольшой совет:
  1. Отредактируйте /etc/mtools.conf добавив следующую строку
    drive u: file="/dev/sda1" # or sda4; some usb-stick have partion
                              # 4 created as factory default.
    


  2. Теперь вам НЕ надо монтировать /dev/sda1. Просто наберите
    mdir u:
    чтобы узнать что на usb-stick'е.

    mcopy * u:
    копирование всех файлов текущего каталога на usb-stick.

    mcopy u:\* .
    копирование всех файлов с usb-stick'а в текущий каталог.

Этот набор утилит прост в использовании и очень удобен.

Как разрешить всем пользователям монтировать файловые системы

Чтобы подмонтировать файловую систему обычно надо обладать привилегиями root'а. Но возможно для некоторых устройств ( например cdrom или usb-stick ) вы желаете позволить делать это любому пользователю. В этом случае все, что вам необходимо сделать это добавить следующую строку в файл /etc/fstab:
# dev     mount point    fs type   flags
/dev/sda1  /mnt/usb      auto      noauto,user 0 0
В этой строке содержится следующая информация: sda1 ( первый раздел первого scsi диска, usb диски отображаются как scsi устройства ), не может быть подмонтирован при запуске системы ( noauto ) и может быть подмонтирован/размонтирован любым пользователем ( user ). Поле FS-type также установлено в auto - можно монтировать usb-stick с файловой системой vfat или ext2 и она будет определена автоматически.

Лэптопы и nfs

NFS полезна если вам необходим централизованный бэкап домашних каталогов нескольких пользователей. Все что нужно - это подмонтировать домашние каталоги с центрального сервера и у всех пользователей будут индивидуальные каталоги доступные на всех компьютерах в сети. Одни и те же данные, установки и т.д. везде. Это действительно удобно.

Но как быть в случае с мобильными пользователями?

Как только вы отключаетесь от сети - ваш каталог теряется. Одно из возможных решений - всегда копировать данные ( rsync ), но это может привести к нарушению целостности каталога если вы недостаточно дисциплинированны или вам не всегда нужна полная копия домашнего каталога. Я нашел неплохое решение этой проблемы - создать второй небольшой домашний каталог с данными и установками необходимыми мне только во время поездок.

Когда вы монтируете файловую систему ( любая файловая система/диск с nfs ) на непустой каталог - содержимое этого каталога становится невидимым и вы видите только подмонтированную файловую систему.

Вот мое решение: создаем точку монтирования для домашних каталогов ( /home ) и производим автомонтирование ( automount ) в нее различных домашних каталогов когда компьютер в сети. Кроме того, перед монтированием создаем softlink для пользователя, владельца лэптопа на off-line домашний каталог:
/home/guido -> ../home_nonet/guido
Когда пользователь guido в сети, он видит свой обычный домашний каталог. Когда он в пути он видит /home_nonet/guido своим домашним каталогом ( /home/guido ).

Это решение мне очень нравится.

Вывод

Построение абстрактного уровня для устройств всегда было целью Unix. Подмонтирование/ размонтирование файловых систем/дисков одна из возможностей достичь этого.