Как я могу узнать диапазон файла использования LBA его inode?

Попробуйте

./configure --host=arm-linux
9
23.05.2017, 14:33
2 ответа

Оказывается, преобразовывает от степеней до LBAs, на самом деле довольно просто, после того как Вы понимаете, куда числа прибывают из. ответ @StephaneChazelas' был очень важен для получения этого понимания.

Исходный debugfs производится

Используя следующий пример, который был упомянут в вопросе.

$ sudo debugfs -R "stat <6560281>" /dev/mapper/fedora_greeneggs-home
debugfs 1.42.7 (21-Jan-2013)
Inode: 6560281   Type: regular    Mode:  0664   Flags: 0x80000
Generation: 1999478298    Version: 0x00000000:00000001
User:  1000   Group:  1000   Size: 20
File ACL: 0    Directory ACL: 0
Links: 1   Blockcount: 8
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x52be10c3:a640e994 -- Fri Dec 27 18:44:03 2013
 atime: 0x52be0fdc:bbf41348 -- Fri Dec 27 18:40:12 2013
 mtime: 0x52be0fe7:18a2f344 -- Fri Dec 27 18:40:23 2013
crtime: 0x52be0dd8:64394b00 -- Fri Dec 27 18:31:36 2013
Size of extra inode fields: 28
Extended attributes stored in inode body: 
  selinux = "unconfined_u:object_r:user_home_t:s0\000" (37)
EXTENTS:
(0):35304898

С информацией о степенях мы можем сделать следующие вычисления. Но нам нужна одна дополнительная информация. Размер блока базовой файловой системы. Можно использовать эту команду для получения его.

Размер блока

$ sudo tune2fs -l /dev/mapper/fedora_greeneggs-home | grep "Block size"
Block size:               4096

Преобразование от степеней до LBAs

Так ключевое преобразование для распознавания вот то, что LBAs находятся в 512-байтовых единицах и вышеупомянутом debugfs управляйте, чтобы сообщил о количестве степеней, сообщает это в 4 096-байтовых блоках.

Так, 4096/512 = 8. Таким образом, мы должны умножить степени на 8 для преобразования их в значения LBA.

Таким образом, следующая математика даст нам наше начало LBA:

$ calc -d
; 35304898 * 8
    282439184
; 

Таким образом, каков наш конечный LBA? Для получения этого, мы должны распознать, что наш inode соответствует в единственном блоке, таким образом, его конечная степень совпадает с его степенью начала. Для вычисления конечного LBA, мы можем использовать это уравнение.

ending LBA = ( (extent + 1) * 8 ) - 1

Так выполнение этого вычисления:

$ calc -d
; ( (35304898 + 1) * 8 ) - 1
    282439191

Подтверждение результатов

Рассмотрение оригинала hdparm вывод:

 byte_offset  begin_LBA    end_LBA    sectors
           0  282439184  282439191          8

Мы видим тот вещи соответствие.

Другой пример

Только для проверки мы являемся правильными, вот больший файл как 2-й пример.

$ ls -i util-linux-2.19.tar.bz2 
6559005 util-linux-2.19.tar.bz2

Вот степени inode.

$ sudo debugfs -R "stat <6559005>" /dev/mapper/fedora_greeneggs-home
...
EXTENTS:
(0-1068):26473396-26474464

Теперь мы делаем преобразований от степеней до LBAs.

$ calc -d
; 26473396*8
    211787168
; (26474464+1)*8 - 1
    211795719

И мы подтверждаем.

$ sudo hdparm --fibmap util-linux-2.19.tar.bz2 
...
 byte_offset  begin_LBA    end_LBA    sectors
           0  211787168  211795719       8552

И мы соответствуем снова.

2
27.01.2020, 20:07

filefrag и debugfs сообщите о смещении, выраженном в количестве блоков файловой системы.

Для получения смещения в количестве 512-байтовых единиц необходимо умножиться размером блока в 512-байтовых единицах. На ext4 FS размер блока часто 4k, таким образом, необходимо умножиться на 8.

С filefrag, можно также использовать a -b 512 опция получить смещение в 512-байтовых единицах.

Можно получить размер блока с stats команда в debugfs, или со статистикой GNU:

stat -fc%s /mount/point

(или любой файл в той файловой системе).

Отметьте это hdparm утилита жесткого диска, она попытается дать смещение в диске в противоположность блочному устройству, на котором смонтирована файловая система (предполагающий, что блочное устройство действительно находится на диске так или иначе). Это только прокладывает себе путь для разделов (путем добавления содержания /sys/class/block/the-block-device/start к фактическому смещению), и md RAID 1 устройство, но не другой возможно диск поддержал типы блочного устройства как устройства картопостроителя устройства, другие уровни RAID, dmraid устройства, цикл, nbd... Также обратите внимание что более старые версии hdparm полагавшийся FIBMAP ioctl, который ограничен, в каком блочном устройстве это может быть использование на, в то время как более новые версии используют FIEMAP как filefrag.

Так, например, если Вы имеете ext2 файловая система на /dev/sda1.

# hdparm --fibmap /file/in/there
/file/in/there:
 filesystem blocksize 1024, begins at LBA 2048; assuming 512 byte sectors.
 byte_offset  begin_LBA    end_LBA    sectors
           0     109766     109767          2

Можно получить те два сектора (но отметить, что файл, вероятно, использует только часть его):

dd skip=109766 count=2 if=/dev/sda # not /dev/sda1

В то время как с filefrag или debugfs.

# filefrag -v /file/in/there
Filesystem type is: ef53
Filesystem cylinder groups is approximately 12
File size of /file/in/there is 87 (1 block, blocksize 1024)
 ext logical physical expected length flags
   0       0    53859               1 merged,eof

Вы получаете его от фактического блочного устройства:

dd bs=1024 skip=53859 count=1 if=/dev/sda1
5
27.01.2020, 20:07
  • 1
    Таким образом, если я понимаю Вас правильно, если filefrag -b512 -v .. говорит "physical_offset: 211787168.. 211795719" они приравнялись бы к LBAs? Это, кажется, танцует джайв с тем же файлом с hdparm --fibmap, 211787168.. 211795719. Если я отбрасываю -b512 -v и используйте определение 1024 и попытайтесь к mult. 8, 26473396⋅8.. 26474464⋅8, я добираюсь 211787168.. 211795712, который близок, но немного прочь. Я думаю, что 2-е значение должно быть (26474465⋅8)-1 = 211795719, не уверено почему все же. –  slm♦ 29.12.2013, 08:47
  • 2
    Какие-либо мысли о том, как получить блоки в 512 единицах от debugfs? –  slm♦ 29.12.2013, 18:41
  • 3
    я закончил тем, что делал вычисления для преобразования от степеней до LBAs использования той же математики выше. –  slm♦ 29.12.2013, 19:48

Теги

Похожие вопросы