Есть ли команда, которая выведет начальный и конечный блоки любого файла?
command-line
filesystems
files
точный
источник
источник
Ответы:
HDPARM
Я не уверен на 100%, что это то, что вы ищете, но я верю, что вы можете сделать это с помощью команды
hdparm
, особенно с ее--fibmap
переключателем.выдержка
пример
Скажем, у нас есть образец файла.
Теперь, когда мы бежим
hdparm
.filefrag
Другой хороший метод для определения начала и конца файла - это
filefrag
. Вам нужно будет использовать соответствующие переключатели, чтобы получить желаемый результат. Одним из преимуществ этого инструментаhdparm
является то, что его может запустить любой пользователь, поэтому нетsudo
необходимости. Вам нужно будет использовать-b512
переключатель, чтобы выходные данные отображались в 512-байтовых блоках. Также нам нужно сказать,filefrag
чтобы быть многословным.пример
debugfs
Третий метод получения файловых LBA - это использование
debugfs
. Этот метод потребует немного математики, но я подумал, что важно показать, как можно преобразовать значение экстентов, сообщаемоеdebugfs
LBA, в те, которые могут быть любопытными.Итак, начнем с inode файла.
ПРИМЕЧАНИЕ: мы также могли бы использовать имя файла внутри,
debugfs
но для этой демонстрации я собираюсь использовать вместо этого inode.Теперь давайте рассмотрим
stat
информациюdebugfs
о нашем иноде.Важная информация находится в разделе экстентов. Это фактически блоки файловой системы, которые используются этим индексом. Нам просто нужно конвертировать их в LBA. Мы можем сделать это с помощью следующего уравнения.
ПРИМЕЧАНИЕ. Предполагая, что наша файловая система использует блоки размером 4 КБ, а базовое оборудование использует 512-байтовые блоки, нам нужно умножить значения на 8.
пример
Таким образом, в нашем примере наш начальный и конечный экстенты одинаковы, поскольку наш файл соответствует одному экстенту.
Таким образом, наши LBA 282439184..282439191.
Ссылки
источник
filefrag
.debugfs
.filefrag
с доступными размерами блоков 1024 и 2048 ..debugfs
с большими размерами файлов : 0 - 12187 .. я не тороплюсь и пойму ... это большая помощь, спасибо ...Номер сектора относительно блочного устройства, содержащего ФС (не весь диск)
(Обратите внимание, что это
hdparm --fibmap
относится ко всему диску, а не к разделу или какому-либо другому blockdev, содержащему FS. Это также требует root.)filefrag -e
работает хорошо и использует универсальный и эффективныйFIEMAP
ioctl , поэтому он должен работать практически на любой файловой системе (включая часто странный BTRFS, даже для файлов, сжатых BTRFS). Он вернется к FIBMAP для файловых систем / ядер без поддержки FIEMAP.XFS только
Если вы используете xfs, то
xfs_bmap
имеет более хороший вывод: он показывает вам, где есть дыры, аfilefrag
просто имеет следующий экстент, начиная с более позднего сектора. Он использует блоки 512B, а не размер блока файловой системы. (обычно 4k в Linux). Он показывает, в какой группе размещения находится каждый экстент и как он выровнен по границам полосы RAID.-l
избыточно, когда-v
используется, но по какой-то причине я всегда печатаю-vpl
.-pl
более компактный вывод.И то
filefrag
и другоеxfs_bmap
покажет вам заранее выделенные экстенты.hdparm --fibmap
полезно, только если вы хотите, чтобы номер сектора относился ко всему жесткому диску , а не к разделу, в котором находится файловая система. Он не работает поверх программного RAID (или, вероятно, чего-то еще между файловой системой и жестким диском). Также требуется рут. Несмотря на название опции, она фактически использует,FIEMAP
когда доступно (более новый ioctl карты экстентов, а не старый медленный ioctl карты блоков).источник
Итак, для данного файла вы хотите знать, какие номера блоков диска содержат начало и конец этого файла.
debugfs (8) выглядит многообещающе для ext2 / 3/4 FS
stat (1), ls -i, lsof (8) предоставляют номер инода, но не больше о дисковых блоках.
head / tail --bytes = 1024 полезно для содержимого файлов, но не для блоков на диске.
dd (1) будет тем, что вы хотите проверить содержимое блока - будьте внимательны к разнице между параметрами seek = и skip = и избегайте = / dev / ..., если вы действительно не хотите, чтобы выходной файл был устройством ,
источник
hdparm --fibmap
перечислит блоки, которые занимает файл. Обратите внимание, что они не могут быть смежными, поэтому «начало и конец» не имеет смысла.источник
--fibmap
. Также вам нужно указать имя файла с ним. Пример:hdparm --fibmap afile
.hdparm
был на уровне всего диска, никогда раньше не использовал его для файлов.