Данная статья является вольным переводом этой
И так, как узнать размер блока, которым был создан файл? Посмотреть свойство zfs? Нет. Так мы сможем узнать только текущий размер блока, поскольку он может меняться налету. Что же делать? На помощь приходит дебаггер zdb.
Узнаём inode number нашего файла:
jmoekamp@hivemind:/datapool/bibliothek/isos# ls -i sol-11-1111-text-x86.iso
1614570 sol-11-1111-text-x86.iso
Далее с помощью дебаггера zdb узнаём размер блока (с помощью inode number’a, колонка dblk)
# zdb -dddd datapool/bibliothek 1614570 Dataset datapool/bibliothek [ZPL], ID 72, cr_txg 45, 290G, 701819 objects, rootbp DVA[0]=<0:8200183e00:200> DVA[1]=<0:c600022600:200> [L0 DMU objset] fletcher4 lzjb LE contiguous unique double size=800L/200P birth=26695605L/26695605P fill=701819 cksum=1ba679a565:8fe1c27eed6:19759bef3e3c4:33579b07e80a94 Object lvl iblk dblk dsize lsize %full type 1614570 3 16K 128K 425M 430M 99.97 ZFS plain file 264 bonus ZFS znode dnode flags: USED_BYTES USERUSED_ACCOUNTED dnode maxblkid: 3436 path /isos/sol-11-1111-text-x86.iso uid 101 gid 10 atime Fri Apr 27 16:25:02 2012 mtime Tue Dec 20 18:58:43 2011 ctime Wed Apr 25 15:00:01 2012 crtime Wed Apr 25 14:59:12 2012 gen 26605871 mode 100000 size 450799616 parent 168872 links 1 xattr 1614571 rdev 0x0000000000000000
Как можно увидеть (по колонке dblk) размер составляет 128 Кб. Изменим размер блока сделаем копию нашего файла и узнаем innode number:
# zfs recordsize=8k datapool/bibliothek
# cp sol-11-1111-text-x86.iso sol-11-1111-text-x86.iso.8kcopy
# ls -i sol-11-1111-text-x86.iso.8kcopy
508011 sol-11-1111-text-x86.iso.8kcopy
Теперь обратно запустим zdb с новым innode number’ом и посмотрим:
# zdb -dd datapool/bibliothek 508011 Dataset datapool/bibliothek [ZPL], ID 72, cr_txg 45, 291G, 701820 objects Object lvl iblk dblk dsize lsize %full type 508011 4 16K 8K 429M 430M 99.90 ZFS plain file
Как видно, размер блока у нового файла составляет уже 16Кб.