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
dump (rdump) - создаёт дамп ФС
07.01.2010 22:08
Администратор
dump (rdump) - создаёт дамп ФС
Автор: lissyara. Оригинал: http://www.lissyara.su/articles/freebsd/file_system/dump/
Программа предназначена для создания дампа файловой системы - для последующего восстановления при помощи restore. dump может делать полный дамп файловой системы, или только файлы изменённые после определённой даты. Собственно дамп может быть сразу записан на дискеты (что нынче уже не актуально, даже в случае наличия ZIP-привода), магнитную ленту (стриммер, но тоже нечасто применяемое устройство - оптические носители очень подешевели, и приводы стоят недорого, хотя хранение мегабайта на стриммере обходится в три и более раза дешевле, к тому же не впример удобней - сравните одну кассету на 200Gb и 45 штук DVD-дисков, вылазиет второй фактор - привод DVD стоит в 5-7 раз дешевле среднего стриммера гигов на 40... Не говоря уже о стриммерах большой ёмкости. А жаль - очень интересные устройства, к тому же абсоютно штатные для FreeBSD - очень многие программы при отсутствии указания устройства вывода пытаются писать на первый стриммер системы - тот же dump, tar и прочие...). Короче - стриммеры рулят :) А по поводу dump (кстати, второе имя rdump - для обратной соместимости с 4.3BSD) - вот пара примеров:/usr/home/lissyara/>dump -0 -f - /dev/ad0s1a > dump_ad0s1a.img DUMP: WARNING: should use -L when dumping live read-write filesystems! DUMP: Date of this level 0 dump: Sat Jan 14 23:37:12 2006 DUMP: Date of last level 0 dump: the epoch DUMP: Dumping /dev/ad0s1a (/) to standard output DUMP: mapping (Pass I) [regular files] DUMP: mapping (Pass II) [directories] DUMP: estimated 56292 tape blocks. DUMP: dumping (Pass III) [directories] DUMP: dumping (Pass IV) [regular files] DUMP: DUMP: 56891 tape blocks DUMP: finished in 32 seconds, throughput 1777 KBytes/sec DUMP: DUMP IS DONE /usr/home/lissyara/>ls -lah | grep img -rw-r--r-- 1 root wheel 56M Jan 14 23:37 dump_ad0s1a.img /usr/home/lissyara/>df -h Filesystem Size Used Avail Capacity Mounted on /dev/ad0s1a 248M 55M 173M 24% / devfs 1.0K 1.0K 0B 100% /dev /dev/ad0s1f 145M 12K 133M 0% /tmp /dev/ad0s1d 1.4G 1.1G 190M 86% /usr /dev/ad0s1e 87M 17M 63M 21% /var /usr/home/lissyara/>
Во как. Для "живых" файловых систем есть специальный ключик, оказывается. Ладно, сделаем ещё раз, с ним./usr/home/lissyara/>dump -0 -L -f - /dev/ad0s1a > dump_ad0s1a.img DUMP: Date of this level 0 dump: Sat Jan 14 23:39:05 2006 DUMP: Date of last level 0 dump: the epoch DUMP: Dumping snapshot of /dev/ad0s1a (/) to standard output DUMP: mapping (Pass I) [regular files] DUMP: mapping (Pass II) [directories] DUMP: estimated 56293 tape blocks. DUMP: dumping (Pass III) [directories] DUMP: dumping (Pass IV) [regular files] DUMP: DUMP: 56892 tape blocks DUMP: finished in 32 seconds, throughput 1777 KBytes/sec DUMP: DUMP IS DONE /usr/home/lissyara/>ls -lah | grep img -rw-r--r-- 1 root wheel 56M Jan 14 23:39 dump_ad0s1a.img /usr/home/lissyara/>
Это делали дамп в файл. Кстати, из листинга видно, что "задампилось" 56 мегабайт - только то, что было занято, после архивации станет ещё меньше. Кстати, компрессию программа не поддерживает - это косяк (я для эксперимента сжал дамп: 56->21Mb - хорошая прибавка к пенсии :)) Поэтому придётся как-то изгаляться - если дампить в файл - то можно bzip2 или gzip`ом жать, а если надо на ленту, со сжатием - тогда дампить в файл через "трубу", сжимая сразу, или сжимать потом, но писать в любом сучае tar`у... Если без сжатия - можно сразу на стример писать.
По поводу восстановления из полученного дампа - программа restore. http://www.freebsd.org/cgi/man.cgi?query=restore&sektion=
Обновлено 28.05.2010 13:21
|
clri - утилита обнуления инод
07.01.2010 22:06
Администратор
clri - утилита обнуления инод
Автор: lissyara. Оригинал: http://www.lissyara.su/articles/freebsd/file_system/clri/
clri - утилита для удаления "невидимых" файлов (невидимость - это следствие ошибок файловой ситемы) Она забивает нулями первые 64 байта дескриптора файла - в итоге все остальные блоки файла определяются как потерянные, потому после clri надо запускать fsck /usr/home/lissyara/>su /usr/home/lissyara/>mount /dev/ad1s1a /mnt /usr/home/lissyara/>cd /mnt /mnt/>mkdir clri /mnt/>cd clri/ /mnt/clri/>touch 1.txt /mnt/clri/>touch 2.txt /mnt/clri/>touch 3.txt /mnt/clri/>ls -i 188417 1.txt 188418 2.txt 188419 3.txt /mnt/clri/>clri /dev/ad1s1a 188417 clri: /dev/ad1s1a: Operation not permitted /mnt/clri/>cd / //>umount /mnt //>clri /dev/ad1s1a 188417 clearing 188417 //>clri /dev/ad1s1a 188418 clearing 188418 //>clri /dev/ad1s1a 188419 clearing 188419 //>fsck /dev/ad1s1a ** /dev/ad1s1a ** Last Mounted on /mnt ** Phase 1 - Check Blocks and Sizes ** Phase 2 - Check Pathnames UNALLOCATED I=188417 OWNER=root MODE=0 SIZE=0 MTIME=Jan 1 03:00 1970 NAME=/clri/1.txt
REMOVE? [yn] y
UNALLOCATED I=188418 OWNER=root MODE=0 SIZE=0 MTIME=Jan 1 03:00 1970 NAME=/clri/2.txt
REMOVE? [yn] y
UNALLOCATED I=188419 OWNER=root MODE=0 SIZE=0 MTIME=Jan 1 03:00 1970 NAME=/clri/3.txt
REMOVE? [yn] y
** Phase 3 - Check Connectivity ** Phase 4 - Check Reference Counts ** Phase 5 - Check Cyl groups FREE BLK COUNT(S) WRONG IN SUPERBLK SALVAGE? [yn] y
SUMMARY INFORMATION BAD SALVAGE? [yn] y
BLK(S) MISSING IN BIT MAPS SALVAGE? [yn] y
241 files, 489 used, 1012502 free (38 frags, 126558 blocks, 0.0% fragmentation)
***** FILE SYSTEM WAS MODIFIED ***** //>mount /dev/ad1s1a /mnt //>cd /mnt/clri/ /mnt/clri/>ls /mnt/clri/>
Нужно пояснить, что файлики 1.txt, 2.txt, 3.txt - это для пробы, типа они и "неудаляются". Для просмотра номера инода файла пользуйтесь командой ls -i, или как вариант man fsdb.
Обновлено 28.05.2010 13:18
dumpfs - программа для показа информации о файловой системе
07.01.2010 22:05
Администратор
dumpfs - программа для показа информации о файловой системе
Автор: lissyara. Оригинал: http://www.lissyara.su/articles/freebsd/file_system/dumpfs/
Программа для вывода информации о файловой системе: тип ФС, расположение суперблока, сколько занято, свободно, сколько симлинков, занятые и свободные иноды и кластеры. У неё тока один ключ -m, с ним, она показывает так, как показывала бы команда newfs./usr/home/lissyara/> /usr/home/lissyara/>df -h Filesystem Size Used Avail Capacity Mounted on /dev/ad0s1a 248M 55M 173M 24% / devfs 1.0K 1.0K 0B 100% /dev /dev/ad0s1f 145M 12K 133M 0% /tmp /dev/ad0s1d 1.4G 1.1G 245M 82% /usr /dev/ad0s1e 87M 17M 63M 21% /var /usr/home/lissyara/> /usr/home/lissyara/>dumpfs /dev/ad0s1e magic 19540119 (UFS2) time Sun Jan 15 17:49:32 2006 superblock location 65536 id [ 43c1207c 31a89f6 ] ncg 4 size 46080 blocks 44503 bsize 16384 shift 14 mask 0xffffc000 fsize 2048 shift 11 mask 0xfffff800 frag 8 shift 3 fsbtodb 2 minfree 8% optim time symlinklen 120 maxbsize 16384 maxbpg 2048 maxcontig 8 contigsumsize 8 nbfree 4474 ndir 66 nifree 11607 nffree 47 bpg 1441 fpg 11528 ipg 2944 nindir 2048 inopb 64 maxfilesize 140806241583103 sbsize 2048 cgsize 4096 csaddr 424 cssize 2048 sblkno 40 cblkno 48 iblkno 56 dblkno 424 cgrotor 2 fmod 0 ronly 0 clean 0 avgfpdir 64 avgfilesize 16384 flags unclean soft-updates fsmnt /var volname swuid 0
cs[].cs_(nbfree,ndir,nifree,nffree): (1383,23,2914,9) (329,27,2854,13) (1374,11,2900,22) (1388,5,2939,3) blocks in last group 1437
cg 0: magic 90255 tell 18000 time Sun Jan 15 17:48:22 2006 cgx 0 ndblk 11528 niblk 2944 initiblk 128 nbfree 1383 ndir 23 nifree 2913 nffree 8 rotor 456 irotor 31 frotor 456 frsum 1 0 0 0 0 0 1 sum of frsum: 8 clusters 1-7: 0 0 0 0 0 0 0 clusters size 8 and over: 1 clusters free: 58-1440 inodes used: 0-30 blks free: 455, 457-11527
cg 1: magic 90255 tell 169c000 time Sun Jan 15 17:49:29 2006 cgx 1 ndblk 11528 niblk 2944 initiblk 192 nbfree 329 ndir 27 nifree 2850 nffree 11 rotor 704 irotor 25 frotor 704 frsum 2 2 0 0 1 0 0 sum of frsum: 11 clusters 1-7: 3 0 0 1 0 0 0 clusters size 8 and over: 1 clusters free: 0, 89, 101, 110-113, 1119-1440 inodes used: 0-24, 26-41, 47-51, 54-64, 66-71, 73-77, 79, 81-90, 92-93, 95-107 blks free: 0-7, 36-37, 424-428, 445-446, 712-719, 796, 799, 808-815, 880-911, 8952-11527
cg 2: magic 90255 tell 2d20000 time Sun Jan 15 17:48:02 2006 cgx 2 ndblk 11528 niblk 2944 initiblk 128 nbfree 1374 ndir 11 nifree 2900 nffree 22 rotor 584 irotor 14 frotor 16 frsum 3 1 2 0 1 1 0 sum of frsum: 22 clusters 1-7: 1 0 0 0 0 0 0 clusters size 8 and over: 1 clusters free: 0, 68-1440 inodes used: 0-13, 15-44 blks free: 0-7, 19, 26-28, 450, 454-455, 474-479, 493-495, 523-527, 543-11527
cg 3: magic 90255 tell 43a4000 time Sun Jan 15 17:48:23 2006 cgx 3 ndblk 11496 niblk 2944 initiblk 128 nbfree 1388 ndir 5 nifree 2939 nffree 3 rotor 16 irotor 5 frotor 8 frsum 0 0 1 0 0 0 0 sum of frsum: 3 clusters 1-7: 1 0 1 0 0 0 0 clusters size 8 and over: 1 clusters free: 0, 2-4, 53-1436 inodes used: 0-4 blks free: 0-7, 13-39, 424-11495 /usr/home/lissyara/> /usr/home/lissyara/>dumpfs -m /dev/ad0s1e # newfs command for /dev/ad0s1e (/dev/ad0s1e) newfs -O 2 -U -a 8 -b 16384 -d 16384 -e 2048 -f 2048 -g 16384 -h 64 -m 8 -o time -s 46080 /dev/ad0s1e /usr/home/lissyara/>
Вот что могу сказать чесно - понял из вывода этой команды примерно 20-30%... Придётся изучать доки по UFS :)
Обновлено 28.05.2010 13:22
|