Вы можете использовать zdb
для определения подобной информации -просто получить индексный дескриптор и набор данных. Например, если ваш набор данных называется tank/foo
, вы можете использовать ls -i
для определения номера инода, а затем zdb -ddddd tank/foo $INODE
для вывода информации.
Вот пример на моей машине:
# cd /var/tmp
# mkfile 13104 file1
# ls -i file1
4125 file1
# zdb -ddddd rpool/VARSHARE/tmp 4125
Dataset rpool/VARSHARE/tmp [ZPL], ID 4128, cr_txg 928175, 8.24G, 1223 objects, rootbp DVA[0]=<0:1f62907a00:200:STD:1> DVA[1]=<0:f4a2eda00:200:STD:1> [L0 DMU objset] fletcher4 lzjb LE unique unencrypted size=800L/200P birth=14962025L/14962025P fill=1223 contiguous 2-copy cksum=1b152e5f60:7b661ed2ecb:1445f97091785:278e0e37baf85b
Object lvl iblk dblk dsize lsize %full type
4125 1 16K 13.0K 13.0K 13.0K 100.00 ZFS plain file
168 bonus System attributes
dnode flags: USED_BYTES USERUSED_ACCOUNTED
dnode maxblkid: 0
path /file1
uid 0
gid 0
atime Fri Sep 7 18:48:00 2018
mtime Fri Sep 7 18:48:00 2018
ctime Fri Sep 7 18:48:00 2018
crtime Fri Sep 7 18:48:00 2018
gen 14962023
mode 0100600
size 13104
parent 4
links 1
pflags 0x40800000204
Indirect blocks:
0 L0 0:0x1f55eb0200:0x3400 0x3400L/0x3400P F=1 B=14962023/14962023 ---
segment [000000000000000000, 0x0000000000003400) size 13.0K
#
Это позволит вам узнать размер данных и количество метаданных (, помеченных как «косвенные блоки» ), которые использует ваш файл.
В данном случае он точно выделил блок размером 13 КБ и использует один непрямой блок размером 16 КБ. Итак, он использует 29 КБ для хранения файла 13 КБ. Я предполагаю, что ваши цифры будут похожи.
Обратите внимание, что 16-килобайтный «iblk», скорее всего, сжат, поэтому можно поспорить, что физически он занимает всего 4 килобайта.
«RIP» — это 64-битный -регистр указателя инструкций ЦП. Его значение определяет адрес, по которому ЦП будет получать следующую команду для выполнения.
(В архитектуре x64 исходный 16-битный -указатель инструкции был (и до сих пор )называется IP; когда архитектура была расширена до 32 -бит, префикс E был добавлен к именам регистров для обозначения доступа к 32 -битам, а с x86 _64 был добавлен префикс R для обозначения полного 64 -бита. ] битовый доступ.)
«Неверное значение RIP» будет означать, что регистр указателя команд указывает на адрес, который не содержит исполняемой памяти. Это предполагает ошибки, такие как неправильная инициализация указателя на функцию перед попыткой ее использования или, возможно, перезапись адреса возврата функции в стеке, поэтому инструкция машинного кода RET
в конечном итоге попытается вернуться по неправильному адресу.