ffsinfo - программа создания дампа метаинформации UFS

07.01.2010 22:10 Администратор
Печать

ffsinfo - программа создания дампа метаинформации UFS

Автор: lissyara.
Оригинал: http://www.lissyara.su/articles/freebsd/file_system/ffsinfo/

`Исчо` одна интересная програмулина для ковыряния FS - ffsinfo. Позволяет делать дамп всей метаинформации файловой системы UFS. Разумеется всю FS дампить никто не заставляет (если дампить всю, то объём дампа составит до 2% от размера FS), при желании можно сделать частичный дамп, определённой группы цилиндров, или даже одной иноды.
Ключики:
-g cylinder_group этот ключ ограничит дамп только информацией об этой группе цилиндров. 0 - первая группа цилинров, -1 - последняя
-i inode - ограничит дамп только информацией об этой иноде. Минимальная разрешённая инода - 2. Если инода не выбрана, но группа цилиндров определена, то будет создан дамп только для инод в пределах этой группы цилиндров.
-l level - уровень детализации дампа. Значение `по-умолчанию` - 255.
-o outfile - имя файла в который будет сделан дамп. Должен быть обязательно. Если задать - то дамп будет выведен на стандартный вывод (в трубу, или на экран.).

Вот примеры использования:/usr/home/lissyara/>ls -i
4945922 .cshrc 4945927 .mailrc 4945931 distfiles
4945924 .login 4945928 .profile 4945930 distfiles.tar.bz2
4945926 .login_conf 4945925 .rhosts 4946193 file.txt
4945923 .mail_aliases 4945929 .shrc
/usr/home/lissyara/>ffsinfo -o - -i 4945927 -l 0x100 /dev/ad1s1c
===== START UFS2 INODE DUMP =====
# 0@80a4700: Inode 0x004b7807
mode u_int16_t 0100644
nlink int16_t 0x0001
uid u_int32_t 0x000003e9
gid u_int32_t 0x00000000
blksize u_int32_t 0x00000000
size u_int64_t 0x000000000000014b
blocks u_int64_t 0x0000000000000004
atime ufs_time_t 1137673537
mtime ufs_time_t 1137673537
ctime ufs_time_t 1137673537
birthtime ufs_time_t 1137673537
mtimensec int32_t 0x00000000
atimensec int32_t 0x00000000
ctimensec int32_t 0x00000000
birthnsec int32_t 0x00000000
gen int32_t 0x1649ada8
kernflags u_int32_t 0x00000000
flags u_int32_t 0x00000000
extsize int32_t 0x00000000
db ufs2_daddr_t[0] 0x 12d7d9f
===== END UFS2 INODE DUMP =====
/usr/home/lissyara/>


Это инфа по одной иноде. Можно достать информацию, например по суперблоку:/usr/home/lissyara/>ffsinfo -o - -l 0x001 /dev/ad1s1c
===== START SUPERBLOCK =====
# 0@80808c4: primary sblock
sblkno int32_t 0x00000028
cblkno int32_t 0x00000030
iblkno int32_t 0x00000038
dblkno int32_t 0x00000bb8
old_cgoffset int32_t 0x00000000
old_cgmask int32_t 0x00000000
old_time int32_t 0
old_size int32_t 0x00000000
old_dsize int32_t 0x00000000
ncg int32_t 0x000000d6
bsize int32_t 0x00004000
fsize int32_t 0x00000800
frag int32_t 0x00000008
minfree int32_t 0x00000008
old_rotdelay int32_t 0x00000000
old_rps int32_t 0x00000000
bmask int32_t 0xffffc000
fmask int32_t 0xfffff800
bshift int32_t 0x0000000e
fshift int32_t 0x0000000b
maxcontig int32_t 0x00000008
maxbpg int32_t 0x00000800
fragshift int32_t 0x00000003
fsbtodb int32_t 0x00000002
sbsize int32_t 0x00000800
spare1 int32_t[2] 0x00000000 0x00000000
nindir int32_t 0x00000800
inopb int32_t 0x00000040
old_nspf int32_t 0x00000000
optim int32_t 0x00000000
old_npsect int32_t 0x00000000
old_interleave int32_t 0x00000000
old_trackskew int32_t 0x00000000
id int32_t[2] 0x43cf81c1 0x85c2eb4f
old_csaddr int32_t 0x00000000
cssize int32_t 0x00001000
cgsize int32_t 0x00004000
spare2 int32_t 0x00000000
old_nsect int32_t 0x00000000
old_spc int32_t 0x00000000
old_ncyl int32_t 0x00000000
old_cpg int32_t 0x00000000
ipg int32_t 0x00005c00
fpg int32_t 0x00016f88
===== START CYLINDER SUMMARY =====
# 1@8080984: internal old_cstotal
ndir int32_t 0x00000000
nbfree int32_t 0x00000000
nifree int32_t 0x00000000
nffree int32_t 0x00000000
===== END CYLINDER SUMMARY =====
fmod int8_t 0x00
clean int8_t 0x00
ronly int8_t 0x00
old_flags int8_t 0xffffff80
fsmnt u_char[MAXMNTLEN] "/usr"
volname u_char[MAXVOLLEN] ""
swuid u_int64_t 0x0000000000000000
pad int32_t 0x00000000
cgrotor int32_t 0x00000017
old_cpc int32_t 0x00000000
maxbsize int32_t 0x00004000
sblockloc int64_t 0x0000000000010000
===== START CYLINDER SUMMARY TOTAL =====
# 1@8080cb4: internal cstotal
ndir int64_t 0x00000000000063fc
nbfree int64_t 0x000000000022a1f5
nifree int64_t 0x00000000004a9303
nffree int64_t 0x0000000000008a21
numclusters int64_t 0x0000000000000000
===== END CYLINDER SUMMARY TOTAL =====
time ufs_time_t 1137745993
size int64_t 0x0000000001324af1
dsize int64_t 0x000000000128a067
csaddr ufs2_daddr_t 0x0000000000000bb8
pendingblocks int64_t 0x0000000000000000
pendinginodes int32_t 0x00000000
snapinum int32_t[ 0] 0x00000000
avgfilesize int32_t 0x00004000
avgfpdir int32_t 0x00000040
save_cgsize int32_t 0x00000000
flags int32_t 0x00000002
contigsumsize int32_t 0x00000008
maxsymlinklen int32_t 0x00000078
old_inodefmt int32_t 0x00000000
maxfilesize u_int64_t 0x000080100202ffff
qbmask int64_t 0x0000000000003fff
qfmask int64_t 0x00000000000007ff
state int32_t 0x00000000
old_postblformat int32_t 0x00000000
old_nrpos int32_t 0x00000000
spare5 int32_t[2] 0x00000000 0x00000000
magic int32_t 0x19540119
===== END SUPERBLOCK =====
/usr/home/lissyara/>


Другие примеры приводить не буду, тока один, чтобы был понятен общий объём инфы:/usr/home/lissyara/>
/usr/home/lissyara/>ffsinfo -o - -l 255 /dev/ad1s1c | wc -l
54452
/usr/home/lissyara/>ffsinfo -o file.txt -l 255 /dev/ad1s1c
/usr/home/lissyara/>ls -lah | grep file.txt
-rw-r--r-- 1 root wheel 13M Jan 20 11:53 file.txt
/usr/home/lissyara/>

Обновлено 28.05.2010 13:21