Использование файловых систем

Материал из 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)
#
Инструменты
    
Личные инструменты