Получение номера сектора из индексного дескриптора или сопоставления адресного_пространства

Чтобы сделать режим консоли постоянным, добавьте строку в /etc/rc. conf:

allscreens_flags="MODE_332"

(замените желаемый номер режима на 332, конечно.)

1
24.04.2019, 02:04
1 ответ

Самый простой способ сделать это — выполнить команду filefrag -v /path/to/file, которую можно запустить от имени обычного пользователя (, в отличие от debugfs, для которой требуется доступ на чтение к блочному устройству, как правило, только для root ). Это даст вам номера физических блоков ext4 (, обычно 4096 байтов )относительно начала раздела для соответствующего логического смещения в файле. Вы также можете использовать filefrag -v -kдля единиц KiB или filefrag -v -b1для 1 -байтовых «блоков».

$ filefrag -vb1 google-chrome-stable_current_x86_64.rpm 
Filesystem type is: ef53
File size of google-chrome-stable_current_x86_64.rpm is 57333190
     (57335808 blocks of 1 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0.. 8388607: 5872025600..5880414207: 8388608: 
   1:  8388608..16777215: 5897191424..5905580031: 8388608: 5880414208:
   2: 16777216..25165823: 6241124352..6249512959: 8388608: 5905580032:
   3: 25165824..33554431: 8019509248..8027897855: 8388608: 6249512960:
   4: 33554432..41943039: 8128561152..8136949759: 8388608: 8027897856:
   5: 41943040..50331647: 8220835840..8229224447: 8388608: 8136949760:
   6: 50331648..57335807: 28538081280..28545085439: 7004160: 8229224448: last,eof

Это использует ioctl(fd, FS_IOC_FIEMAP,...)для запроса сопоставления экстентов для файлового дескриптора, который, в свою очередь, использует метод ->fiemap()наиболее распространенных файловых систем. Гораздо более старые ядра использовали ioctl(fd, FS_IOC_FIBMAP,...), но он может отображать только один блок за раз и может потребовать миллионы вызовов для больших файлов сегодня.

1
28.01.2020, 00:13

Теги

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