Домашнее задание на неделю 50

Задания на изучение способов организации данных на физических носителях, включая Linux LVM и файловую систему Ext4. Контрольный срок сдачи — .

В заданиях ниже, данные на блочном устройстве представлены в виде (слева направо) шестнадцатеричного смещения, 16 октетов (шестнадцатеричных чисел), и интерпретации этих же октетов в виде 16 печатных символов ASCII (с заполнением символом . там, где это невозможно.)

Строки дампа, состоящие из единственного символа *, означают повтор (возможно — многократный) предшествующей строки до следующего смещения. Аналогично, строка 0* означает заполнение нулевыми октетами. Если не указано обратного, интерпретация этих условных обозначений, а равно и самих «скрытых» так данных, не является отдельным вариантом задания.

Обратите внимание, что в общем случае для интерпретации выбранных данных дампа может потребоваться начать чтение с некоторой структуры данных, описывающей файловую систему в целом (например, суперблока), спускаясь по ссылкам от нее, например, в корневую директорию, затем в директорию, содержащую файл, откуда к некоторому «дескриптору» данного файла и выбранным данным.

  1. Файл /etc/fstab имеет следующий вид. Опишите назначение двух строк файла.

    /dev/vgjavba-i/lvroot-z5debba   /       ext4    rw,noatime      0 1
    proc                            /proc   proc    defaults        0 0
    tmp                             /tmp    tmpfs   nodev,nosuid    0 0
    /dev/vgjavba-i/lvvar-z5debbc    /var    ext4    nosuid,nodev,noatime  0 2
    /dev/mapper/swbiwys             none    swap    defaults        0 0
    /dev/cdrom              /media/cdrom    iso9660 ro,noauto,nodev,nosuid,user 0 0
    /dev/fd0		/media/floppy	vfat	rw,noauto,nodev,nosuid,user 0 0
    LABEL=sweet                     /home   ext4    nodev           0 2
    UUID=ee70261d-0a0a-4199-9392-b2555350fbc2 /home/storage btrfs nodev,noatime 0 2
    /dev/disk/by-id/wwn-0x508f9913-part37 /home/bigdata squashfs  ro,nodev  0 0
    
  2. Стандартом IEEE Std 1003.1-2017 (POSIX.1-2017) определена функция stat, позволяющая получить такую информацию о файле, как размер, режим доступа, идентификатор пользователя-владельца, etc. С другой стороны, в случае файловой системы Ext2, библиотека Libext2fs предлагает функцию ext2fs_read_inode (и семейство функций ext2fs_namei для поиска номера inode по имени файла) — позволяющую получить доступ к, в сущности, той же информации (cf., например, определение структуры stat в sys/stat.h POSIX.1-2017 и описание структуры ext2_inode в ext2fs/ext2_fs.h.)

    Перечислите отличия между использованием функции stat POSIX.1-2017 и функции ext2fs_read_inode библиотеки Libext2fs. В каких случаях разработчик может предпочесть ту или иную функцию?

    Для примера, ниже приведен вывод, для одного и того же файла, команды stat пакета GNU Coreutils и одноименной команды инструмента debugfs пакета e2fsprogs, являющиеся команднострочными интерфейсами для вышеуказанных двух функций.

    $ stat -- bsdgames_2.17-28_amd64.deb 
      File: bsdgames_2.17-28_amd64.deb
      Size: 962404          Blocks: 1880       IO Block: 4096   regular file
    Device: 50fd07h/5307655d        Inode: 80028       Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2019-11-16 03:40:07.566586095 +0000
    Modify: 2018-04-28 14:25:34.000000000 +0000
    Change: 2019-11-16 02:56:21.006325859 +0000
     Birth: -
    $ debugfs -- /dev/vgnaijo/lvcokea 
    debugfs:  stat <80028> 
    Inode: 80028   Type: regular    Mode:  0644   Flags: 0x80000
    Generation: 927611923    Version: 0x00000000:00000001
    User:     0   Group:     0   Project:     0   Size: 962404
    File ACL: 0
    Links: 1   Blockcount: 1880
    Fragment:  Address: 0    Number: 0    Size: 0
     ctime: 0x5dcf6555:0182198c -- Sat Nov 16 02:56:21 2019
     atime: 0x5dcf6f97:8715abbc -- Sat Nov 16 03:40:07 2019
     mtime: 0x5ae4845e:00000000 -- Sat Apr 28 14:25:34 2018
    crtime: 0x5dcf6553:dbe21cf8 -- Sat Nov 16 02:56:19 2019
    Size of extra inode fields: 32
    Inode checksum: 0x63fece6e
    EXTENTS:
    (0-234):44032-44266
    debugfs:  quit 
    $