Настольная книга по Linux/Файловые системы

Материал из Викиучебника — открытых книг для открытого мира

Данный раздел посвящен командам, взаимодействующим с отдельными файловыми системами (ФС), а равно с файловой системой в целом — совокупностью всех достижимых от текущего корня отдельных ФС.[1]

В первой части раздела рассматриваются команды, независящие от конкретного типа файловой системы. Затем рассмотрены примеры команд для ФС различных типов — начиная с ФС распространенного семейства Ext2+ и заканчивая специализированными «архивными» ФС — ISO 9660 и Squashfs.

Примеры по работе с отдельными файлами можно найти в разделе Файлы; по работе с блочными устройствами (на которых, как правило, и создаются файловые системы) — в разделе Блочные устройства.

Непривилегированные операции[править]

  • Список подключенных в данный момент файловых систем (устройство, точка подключения, тип, опции):[2]

    $ mount 
    $ cat < /etc/mtab 
    $ cat < /proc/mounts 
    
  • Список доступных (поддерживаемых ядром) типов файловых систем:[2]

    $ cat < /proc/filesystems 
    
  • Занятое и свободное пространство для подключенных в данный момент ФС:[3][4]

    $ df 
    

    … Для файловых систем, содержащих файлы file1, file2:

    $ df -- file1 file2 
    

    … Для файловых систем типов ext2 и ext3[3]:

    $ df -t ext2 -t ext3 
    

    … Для файловых систем, доступных для записи:

    $ gawk '$4 ~ /\<rw\>/ { printf("%s\0", $2); }' < /proc/mounts \
          | xargs -r0 -- df -- 
    
  • Поиск процессов, использующих файловую систему, подключенную к dirname:[5]

    $ fuser -c dirname 
    

    … Поиск и принудительное (безусловное — SIGKILL) завершение найденных процессов:

    $ fuser -ck dirname 
    

    … Поиск и отправка сигнала завершения (SIGTERM = 15):

    $ fuser -ck -TERM dirname 
    $ fuser -ck -15 dirname 
    

    Обратите внимание, что команда fuser(1) опирается на список открытых каждым процессом файлов (/proc/pid/fd/[2]). Поскольку непривилегированным пользователям такого рода информация доступна только в отношении собственных процессов, результирующий список будет полным только при выполнении команды от имени root. Принудительное завершение и отправка сигналов процессам, кроме выполняемых от имени того же пользователя, также потребует привилегий.

Подключение и отключение[править]

  • Подключение файловой системы, находящейся на блочном устройстве /dev/name к директории dirname:

    # mount -- /dev/name dirname 
    

    … Находящейся в файле («образе») filename.iso:

    # mount -o loop -- filename.iso dirname 
    

    … Только для чтения; файлы устройств и действие битов set-UID, set-GID будут блокированы:

    # mount -o loop,ro,nodev,nosuid -- filename.iso dirname 
    
  • Подключение всех файловых систем, описанных в fstab(5) (кроме отмеченных noauto в поле опций; команда полезна, например, после добавления новых записей):

    # mount -a 
    

    … Только ФС типа ext2:

    # mount -a -t ext2 
    

    … Только ФС, использующих опцию ro (другими словами — подключаемых в режиме «только чтение»):

    # mount -a -O ro 
    
  • Подключение файловой системы к директории dirname согласно настройкам fstab(5):

    # mount -- dirname 
    

    … Файловой системы, размещенной на устройстве /dev/name:

    # mount -- /dev/name 
    

    … Файловой системы с меткой label:

    # mount -L label 
    # mount -- /dev/disk/by-label/label 
    

    … Файловой системы с идентификатором uuid:

    # mount -U uuid 
    # mount -- /dev/disk/by-uuid/uuid 
    
  • Переподключение файловой системы от директории dirname к директории newname:

    # mount --move -- dirname newname 
    
  • Переподключение файловых систем — размещенной на блочном устройстве /dev/name, хранящейся в файле («образе») file1, и подключенной к директории dirname — в режим «только чтение»:

    # mount -o remount,ro -- /dev/name 
    # mount -o remount,ro -- file1 
    # mount -o remount,ro -- dirname 
    

    … В режим «чтение и запись»:

    # mount -o remount,rw -- /dev/name 
    # mount -o remount,rw -- file1 
    # mount -o remount,rw -- dirname 
    

    … Изменение размера «файловой системы» tmpfs, подключенной к /tmp, до 3 GiB:

    # mount -o remount,size=3G -- /tmp
    
  • Отключение файловых систем — размещенных на блочных устройствах /dev/name1, /dev/name1, хранящихся в файлах («образах») file1, file2, и подключенных к директориям dir1, dir2:

    # umount -- /dev/name1 /dev/name1 file1 file2 dir1 dir2 
    

    … «Отложенное» отключение ФС /dev/nameточка подключения будет освобождена немедленно, однако фактическое отключение будет выполнено лишь когда не останется использующих ФС процессов:

    # umount -l -- /dev/name 
    
  • Подключение директории dirname к директории newname:

    # mount --bind -- dirname newname 
    

    … Полной иерархии директорий dirname — включая все ФС, подключенные «ниже» dirname:

    # mount --rbind -- dirname newname 
    

Ext2, Ext3, Ext4[править]

Ниже мы будем предполагать, что файловая система семейства Ext2+ размещена на некотором блочном устройстве (/dev/name) — поскольку можно поспорить, что именно такое использование рассматриваемых команд является типовым. Несложно убедиться, однако, что эти команды работают как правило и в тех случаях, когда целевая файловая система хранится в обычном файле («образе» filename.ext2.)

При работе с файлами-образами, привилегии root не являются строго необходимыми, однако в отсутствие директорий /sbin, /usr/sbin в значении переменной окружения PATH, может потребоваться указывать полное имя исполнимого файла команды, подобно:

$ /sbin/tune2fs -l -- filename.ext2 
  • Создание файловой системы Ext4 на блочном устройстве /dev/name:

    # mke2fs -t ext4 -- /dev/name 
    

    … Образа filename.ext4 объемом 1 MiB:

    $ mke2fs -t ext4 -- filename.ext4 1M 
    

    … Ext3:

    # mke2fs -j -- /dev/name 
    

    … Ext2:

    # mke2fs -- /dev/name 
    
  • Создание файловой системы Ext4 на /dev/vgroup/lvolume с возможностью увеличения размера resize2fs(8) до 64 GiB без необходимости отключения:

    # mke2fs -t ext4 -E resize=64G -- /dev/vgroup/lvolume
    
  • Увеличение размера логического тома LVM /dev/vgroup/lvolume до 42 GiB и увеличение собственного размера размещенной на нем файловой системы:

    # lvextend -L 42G -- /dev/vgroup/lvolume \
          && resize2fs -- /dev/vgroup/lvolume 
    

    Обратите внимание, что при использовании опции -E resize= на этапе создания, увеличение размера файловой системы вплоть до заданного предела не требует предварительного ее отключения.

    … Отключение ФС и уменьшение ее собственного размера до 24 GiB — с последующим уменьшением размера хранящего ее логического тома (осторожно! при неаккуратном использовании, уменьшение размера логического тома может привести к потере данных!):

    # umount -- /dev/vgroup/lvolume 
    # resize2fs -- /dev/vgroup/lvolume 24G \
          && lvreduce -L 24G -- /dev/vgroup/lvolume 
    
  • Вывести текущие параметры файловой системы /dev/name (содержание superblock):

    # tune2fs -l -- /dev/name 
    
  • Смена метки для файловой системы /dev/name на newlabel:

    # tune2fs -L newlabel -- /dev/name 
    

    … Перегенерация уникального идентификатора (UUID):

    # tune2fs -U random -- /dev/name 
    
  • Вывести полный список файлов ФС /dev/name («образа» filename.ext2) без ее подключения — используя fls(1):

    # fls -apr -- /dev/name 
    $ fls -apr -- filename.ext2 
    

ISO 9660[править]

  • Создание образа filename.iso файловой системы ISO 9660 из файлов директорий dir1, dir2:

    $ mkisofs -o filename.iso dir1 dir2 
    $ genisoimage -o filename.iso dir1 dir2 
    
    … Непосредственно на «чистом» DVD /dev/sr3:

    $ growisofs -Z /dev/sr3 dir1 dir2 
    

    … Добавить директории к уже существующей на DVD ФС ISO 9660:

    $ growisofs -M /dev/sr3 dir1 dir2 
    
  • Создание образа filename.iso из единственной директории dirname, используя makefs(8):

    $ makefs -t cd9660 filename.iso dirname 
    
  • Снятие образа filename.iso существующей файловой системы ISO 9660 с устройства /dev/sr3:

    $ cp -- /dev/sr3 filename.iso 
    
  • Вывести список файлов образа filename.iso используя bsdtar(1):

    $ bsdtar -t  < filename.iso 
    $ bsdtar -tv < filename.iso 
    

Squashfs[править]

  • Создание образа filename.squashfs файловой системы Squashfs из файлов директорий dir1, dir2:

    $ mksquashfs dir1 dir2 filename.squashfs 
    

    … Используя сжатие XZ:

    $ mksquashfs dir1 dir2 filename.squashfs -comp xz 
    
  • Вывести список файлов образа filename.squashfs:

    $ unsquashfs -l  filename.squashfs 
    $ unsquashfs -ll filename.squashfs 
    

См. также[править]

Примечания[править]

  1. 3.326 Root Directory(англ.) The Open Group Base Specifications, Issue 7, IEEE Std 1003.1-2013 Проверено 2015-05-05 г.
  2. а б в The /proc filesystem(англ.) Linux Kernel Documentation Проверено 2015-05-03 г.
  3. а б 14.1 df: Report file system disk space usage(англ.) GNU Coreutils. Free Software Foundation. Проверено 2015-05-09 г.
  4. df(англ.) The Open Group Base Specifications, Issue 7, IEEE Std 1003.1-2013 Проверено 2015-05-05 г.
  5. fuser(англ.) The Open Group Base Specifications, Issue 7, IEEE Std 1003.1-2013 Проверено 2015-05-09 г.