Назад | Перейти на главную страницу

Как мне составить список блоков данных файла в Linux?

Насколько я понимаю, каждый файл в Unix-подобной операционной системе имеет номер inode (который можно просмотреть с помощью «ls -i»), и каждый inode представляет собой список дисковых блоков, которые содержат фактические данные файла.

Есть ли команда Linux, которая принимает имя файла в качестве аргумента и распечатывает список дисковых блоков, на которые указывает индексный дескриптор этого файла?

P.S. Речь идет о файловой системе ext3.

Вы можете использовать инструмент «debugfs» для просмотра информации о файле в командной строке или интерактивном режиме. либо используйте:

# debugfs /dev/<spartition>
# stat /path/to/file

или

# debugfs -R "stat /path/to/file" /dev/<partition>

например:

# debugfs -R "stat /etc/passwd"  /dev/sda5
Inode: 435914   Type: regular    Mode:  0644   Flags: 0x0
Generation: 979004472    Version: 0x00000000
User:     0   Group:     0   Size: 1577
File ACL: 0    Directory ACL: 0
Links: 1   Blockcount: 8
Fragment:  Address: 0    Number: 0    Size: 0
ctime: 0x4a2d6f78 -- Mon Jun  8 23:07:20 2009
atime: 0x4a2d6f79 -- Mon Jun  8 23:07:21 2009
mtime: 0x4a2d6f78 -- Mon Jun  8 23:07:20 2009
Size of extra inode fields: 4
BLOCKS:
(0):1767438
TOTAL: 1

Простой способ получить список блоков (без необходимости читать из раздела, как в debugfs ответы) заключается в использовании FIBMAP ioctl. Я не знаю ни одной команды для этого, но написать ее очень просто; быстрый поиск в Google дал мне пример использования FIBMAP, который делает именно то, что вы хотите. Одним из преимуществ является то, что он будет работать с любой файловой системой, которая поддерживает bmap операция, а не только ext3.

Более новая (и более эффективная) альтернатива - FIEMAP ioctl, который также может возвращать подробную информацию о экстентах (полезно для ext4).

Посмотрите на синтаксис для «debugfs» и, в частности, на команду «stat». Это покажет вам список блоков данных, используемых файлом. Вы можете передать параметры в «debugfs» с аргументом «-f», чтобы вызвать его из сценария.

hdparm --fibmap /path/to/filename

Я не буду работать с zfs, но буду работать с ext4, btrfs, (v) fat и т. Д.

man 8 hdparm :

--fibmap При использовании это должен быть единственный установленный флаг. Он требует в качестве параметра путь к файлу и распечатывает список экстентов устройства (диапазонов секторов), занимаемых этим файлом на диске. Номера секторов даны как абсолютные номера LBA, начиная с сектора 0 физического устройства (не раздел или файловая система). Затем эту информацию можно использовать для различных целей, например, для проверки степени фрагментации больших файлов или определения соответствующих секторов, которые следует намеренно повредить во время процедур тестирования с внесением ошибок.

По крайней мере, на некоторых Linux-машинах ... "ls -s" может предоставить то, что вы ищете.

Изменить: плохо, я вижу, что вы ищете список самих блоков, а не их количество.

e2fsck -b 32768 / dev / hda1 Я чувствую, что вы можете попробовать это, или если вы ищете больше docx на том же самом, вы можете проверить следующее

http://www.linux-tutorial.info/modules.php?name=MContent&pageid=97