Использование файловых систем
Материал из Wiki Open Book.
Оглавление | Предыдущая страница | Следующая страница
Для подключения файловой системы необходимо использовать точку монтирования — любую пустую директорию. Можно использовать директорию, в которой есть файлы и директории, но после подключения к ней файловой системы, старые файлы и директории видны не будут. Сами файлы никуда не пропадают, они становятся доступными после отключения файловой системы.
Сначала создадим директорию, к которой будем подключать файловую систему. И только потом ее смонтируем.
# mkdir /mnt/free # mount -t ext3 /dev/hda1 /mnt/free # mount /dev/hda3 on / type ext3 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) /dev/hda5 on /usr type ext3 (rw) /dev/hda6 on /home type ext3 (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) usbfs on /proc/bus/usb type usbfs (rw) /dev/hda1 on /mnt/free type ext3 (rw) #
Теперь посмотрим содержимое директории /mnt/free. В ней мы увидим содержимое подключенной файловой системы.
# ls /mnt/free lost+found/ #
В подавляющем большинстве случаев, наличие директории lost+found говорит, что перед нами корень физической файловой системы. Эта директория используется программой fsck. При обнаружении потерянных блоков, она восстанавливает их в виде файлов в директории lost+found. Предполагается, что затем Вы сможете восстановить данные.
Файловая система автоматически подключилась в режиме полного доступа, поэтому проверять ее нельзя. Что необходимо сделать, что бы ее проверить? Перевести в режим только для чтения. Для этого воспользуемся программой mount и параметрами монтирования ro и remount.
# mount -o ro,remount /mnt/free # mount /dev/hda3 on / type ext3 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) /dev/hda5 on /usr type ext3 (rw) /dev/hda6 on /home type ext3 (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) usbfs on /proc/bus/usb type usbfs (rw) /dev/hda1 on /mnt/free type ext3 (ro) #
Теперь попробуем создать файл в этой файловой системе.
# touch /mnt/free/test touch: невозможно выполнить touch для `/mnt/free/test': Read-only file system #
Проверим файловую систему на наличие ошибок. Fsck предупредит о том, что мы пытаемся проверить используемую файловую систему. Но мы знаем, что она подключена в режиме только для чтения и ее можно проверять.
# fsck -f /dev/hda1 fsck 1.35 (28-Feb-2004) e2fsck 1.35 (28-Feb-2004) /dev/hda1 is mounted. WARNING!!! Running e2fsck on a mounted filesystem may cause SEVERE filesystem damage. Do you really want to continue (y/n)? yes Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/hda1: 12/1310720 files (0.0% non-contiguous), 49346/2621422 blocks #
После проверки, переводим файловую систему в режим полного доступа.
# mount -o rw,remount /mnt/free # mount /dev/hda3 on / type ext3 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) /dev/hda5 on /usr type ext3 (rw) /dev/hda6 on /home type ext3 (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) usbfs on /proc/bus/usb type usbfs (rw) /dev/hda1 on /mnt/free type ext3 (rw) #
Для отключения файловой системы воспользуемся программой umount.
# umount /dev/hda1 umount: /mnt/free: device is busy umount: /mnt/free: device is busy #
Упс! Не получилось. Файловая система кем то используется и ее отключить нельзя. Что делать? Необходимо узнать какая программа использует файловую систему и либо завершить ее работу, либо сделать так, что бы программа перестала использовать директорию в этой файловой системе. Если программа держит открытым файл в этой файловой системе и не производит операции чтения или записи, то система может быть отключена. Попробуем определить, кто нам мешает. Получить список открытых файлов можно при помощи программы lsof.
# lsof /mnt/free COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME bash 6075 root cwd DIR 3,1 4096 2 /mnt/free #
Итак, мы видим, что программа bash, запущенная пользователем root в данный момент находится в директории /mnt/free. Достаточно перейти в другую директорию и повторить попытку отключения файловой системы.
Другой способ получения информации об использовании файловой системы — это программа fuser.
# fuser -v /mnt/free
USER PID ACCESS COMMAND
/mnt/free root 6075 ..c.. bash
root kernel mount /mnt/free
#
В отличии от lsof, fuser может не только показать какие программы используют файловую систему, но и послать этим программам сигнал.
# fuser -km /mnt/free /mnt/free: 6075c #
При помощи параметра –k мы говорим, что бы fuser послал сигнал KILL(9) всем программам, использующим указанный файл. А параметр –m говорит, что файл — это точка монтирования либо файл блочного устройства и сигнал посылается всем программам, которые используют файлы в этой файловой системе.
Теперь файловую систему можно отключать.
# umount /mnt/free # mount /dev/hda3 on / type ext3 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) /dev/hda5 on /usr type ext3 (rw) /dev/hda6 on /home type ext3 (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) usbfs on /proc/bus/usb type usbfs (rw) #

