|
*Проблема* Утеря-порча данных на /dev/da0s2. Причем раздел в таблице разделов отсутствует, файлы устройств отсутствуют. *Решение* Для начала требуем дополнительный диск такой же геометрии подключаем порченный как *da1* и чистый *da2*
da0 at mpt0 bus 0 target 1 lun 0 da0: <ATA ST3250620NS E> Fixed Direct Access SCSI-5 device da0: 300.000MB/s transfers, Tagged Queueing Enabled da0: 238475MB (488397168 512 byte sectors: 255H 63S/T 30401C) da1 at mpt0 bus 0 target 2 lun 0 da1: <ATA WDC WD2500JS-00M 1C03> Fixed Direct Access SCSI-5 device da1: 300.000MB/s transfers, Tagged Queueing Enabled da1: 238475MB (488397168 512 byte sectors: 255H 63S/T 30401C) da2 at mpt0 bus 0 target 3 lun 0 da2: <ATA WDC WD2500JS-00M 2E02> Fixed Direct Access SCSI-5 device da2: 300.000MB/s transfers, Tagged Queueing Enabled da2: 238475MB (488397168 512 byte sectors: 255H 63S/T 30401C) GEOM_MIRROR: Kernel module is too old to handle metadata from da0. GEOM_MIRROR: Device gm0: provider da1 detected.
Убираем geom:
34 gmirror forget gm0 35 gmirror list 36 gmirror stop gm0 37 gmirror list 38 gmirror unload
Теперь заливаем данные на da2:
dd if=/dev/da1 of=/dev/da2 bs=8k conv=noerror,sync
Работаем только с этим диском! *ПРОБУЕМ ВОССТАНОВИТЬ BSD-СЛАЙС ЧЕРЕЗ FDISK*
[root@dsX ~]# fdisk -i da2
******* Working on device /dev/da2 *******
parameters extracted from in-core disklabel are:
cylinders=30401 heads=255 sectors/track=63 (16065 blks/cyl)
Figures below won't work with BIOS for partitions not in cyl 1
parameters to be used for BIOS calculations are:
cylinders=30401 heads=255 sectors/track=63 (16065 blks/cyl)
Do you want to change our idea of what BIOS thinks ? [n]
Media sector size is 512
Warning: BIOS sector numbering starts with sector 1
Information from DOS bootblock is:
The data for partition 1 is:
sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
start 63, size 18860247 (9209 Meg), flag 80 (active)
beg: cyl 0/ head 1/ sector 1;
end: cyl 1023/ head 9/ sector 63
Do you want to change it? [n]
The data for partition 2 is:
<UNUSED>
Do you want to change it? [n] y
Supply a decimal value for "sysid (165=FreeBSD)" [0] 165
Supply a decimal value for "start" [0] 18860310
^^^^^^^^^
определяем смещение : 63+18860247
Supply a decimal value for "size" [0] 488392064
^^^^^^^^
размер берем из утилит testdisk, gpart, sysinstall или scan_ffs
fdisk: WARNING: partition does not end on a cylinder boundary
fdisk: WARNING: this may confuse the BIOS or some operating systems
Correct this automatically? [n] y
fdisk: WARNING: adjusting size of partition to 488376000
Explicitly specify beg/end address ? [n]
sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
start 18860310, size 488376000 (238464 Meg), flag 0
beg: cyl 150/ head 0/ sector 1;
end: cyl 853/ head 254/ sector 63
Are we happy with this entry? [n] y
The data for partition 3 is:
<UNUSED>
Do you want to change it? [n] n
The data for partition 4 is:
<UNUSED>
Do you want to change it? [n] n
Partition 1 is marked active
Do you want to change the active partition? [n]
We haven't changed the partition table yet. This is your last chance.
parameters extracted from in-core disklabel are:
cylinders=30401 heads=255 sectors/track=63 (16065 blks/cyl)
Figures below won't work with BIOS for partitions not in cyl 1
parameters to be used for BIOS calculations are:
cylinders=30401 heads=255 sectors/track=63 (16065 blks/cyl)
Information from DOS bootblock is:
1: sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
start 63, size 18860247 (9209 Meg), flag 80 (active)
beg: cyl 0/ head 1/ sector 1;
end: cyl 1023/ head 9/ sector 63
2: sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
start 18860310, size 488376000 (238464 Meg), flag 0
beg: cyl 150/ head 0/ sector 1;
end: cyl 853/ head 254/ sector 63
3: <UNUSED>
4: <UNUSED>
Should we write new partition table? [n] y
[root@dsX ~]# ls -la /dev/da2s*
crw-r----- 1 root operator 0, 125 Oct 14 13:37 /dev/da2s1
crw-r----- 1 root operator 0, 129 Oct 14 13:37 /dev/da2s1a
crw-r----- 1 root operator 0, 130 Oct 14 13:37 /dev/da2s1b
crw-r----- 1 root operator 0, 131 Oct 14 13:37 /dev/da2s1c
crw-r----- 1 root operator 0, 133 Oct 14 13:37 /dev/da2s1d
crw-r----- 1 root operator 0, 134 Oct 14 13:37 /dev/da2s1e
crw-r----- 1 root operator 0, 97 Oct 14 13:37 /dev/da2s1f
crw-r----- 1 root operator 0, 98 Oct 14 13:37 /dev/da2s2
crw-r----- 1 root operator 0, 99 Oct 14 13:37 /dev/da2s2c
crw-r----- 1 root operator 0, 100 Oct 14 13:37 /dev/da2s2d
crw-r----- 1 root operator 0, 118 Oct 14 13:37 /dev/da2s2e
crw-r----- 1 root operator 0, 119 Oct 14 13:37 /dev/da2s2f
Видим, что файлы устройств /dev/da2s2* появились
[root@dsX ~]# bsdlabel /dev/da2s2 # /dev/da2s2: 8 partitions: # size offset fstype [fsize bsize bps/cpg] c: 461370735 0 unused 0 0 # "raw" part, don't edit d: 83886080 0 4.2BSD 2048 16384 28552 e: 41943040 83886080 4.2BSD 2048 16384 28552 f: 335541615 125829120 4.2BSD 2048 16384 28552 bsdlabel: partition c doesn't cover the whole unit! bsdlabel: An incorrect partition c may cause problems for standard system utilities
пытаемся примонтировать диски:
[root@dsX ~]# mount /dev/da2s2e /mnt/disk/ mount: /dev/da2s2e: Operation not permitted [root@dsX ~]# mount /dev/da2s2f /mnt/disk/ mount: /dev/da2s2f: Operation not permitted [root@dsX ~]# mount /dev/da2s2d /mnt/disk/ mount: /dev/da2s2d: Operation not permitted [root@dsX ~]# tail -f /var/log/messages Oct 14 18:47:21 dsX kernel: WARNING: Expected rawoffset 0, found 63 Oct 14 18:47:25 dsX mountd[785]: bad exports list line /opt/logs Oct 14 18:53:32 dsX kernel: WARNING: Expected rawoffset 0, found 63 Oct 14 18:55:55 dsX kernel: WARNING: Expected rawoffset 0, found 60803366 Oct 14 18:56:25 dsX mountd[785]: bad exports list line /opt/logs Oct 15 11:52:03 dsX mountd[785]: can't delete exports for /mnt/disk: Invalid argument Oct 15 11:52:03 dsX mountd[785]: bad exports list line /opt/logs Oct 15 13:55:12 dsX kernel: WARNING: R/W mount of /db denied. Filesystem is not clean - run fsck Oct 15 13:55:17 dsX kernel: WARNING: R/W mount of /home denied. Filesystem is not clean - run fsck Oct 15 13:55:20 dsX kernel: WARNING: R/W mount of /opt denied. Filesystem is not clean - run fsck ^C
чекаем разделы
[root@dsX ~]# fsck /dev/da2s2e ** /dev/da2s2e ** Last Mounted on /db ** Phase 1 - Check Blocks and Sizes ** Phase 2 - Check Pathnames ** Phase 3 - Check Connectivity ** Phase 4 - Check Reference Counts ** Phase 5 - Check Cyl groups 152 files, 2223 used, 10151976 free (168 frags, 1268976 blocks, 0.0% fragmentation) ***** FILE SYSTEM MARKED CLEAN ***** [root@dsX ~]# fsck -y /dev/da2s2f ** /dev/da2s2f ** Last Mounted on /home ** Phase 1 - Check Blocks and Sizes INCORRECT BLOCK COUNT I=8597789 (4 should be 0) CORRECT? yes ** Phase 2 - Check Pathnames ** Phase 3 - Check Connectivity ** Phase 4 - Check Reference Counts UNREF FILE I=8574008 OWNER=9881 MODE=100644 SIZE=0 MTIME=Oct 12 22:05 2009 CLEAR? yes UNREF FILE I=8574059 OWNER=9881 MODE=100644 SIZE=0 MTIME=Oct 12 22:05 2009 RECONNECT? yes NO lost+found DIRECTORY CREATE? yes UNREF FILE I=8597789 OWNER=9881 MODE=100644 SIZE=0 MTIME=Oct 12 22:05 2009 CLEAR? yes ** Phase 5 - Check Cyl groups FREE BLK COUNT(S) WRONG IN SUPERBLK SALVAGE? yes SUMMARY INFORMATION BAD SALVAGE? yes BLK(S) MISSING IN BIT MAPS SALVAGE? yes 50298 files, 769007 used, 80476029 free (82885 frags, 10049143 blocks, 0.1% fragmentation) ***** FILE SYSTEM MARKED CLEAN ***** ***** FILE SYSTEM WAS MODIFIED ***** [root@dsX ~]# fsck -y /dev/da2s2f ** /dev/da2s2f ** Last Mounted on /home ** Phase 1 - Check Blocks and Sizes ** Phase 2 - Check Pathnames ** Phase 3 - Check Connectivity ** Phase 4 - Check Reference Counts ** Phase 5 - Check Cyl groups 50298 files, 769007 used, 80476029 free (82885 frags, 10049143 blocks, 0.1% fragmentation) [root@dsX ~]# fsck -y /dev/da2s2d ** /dev/da2s2d ** Last Mounted on /opt ** Phase 1 - Check Blocks and Sizes ** Phase 2 - Check Pathnames ** Phase 3 - Check Connectivity ** Phase 4 - Check Reference Counts ** Phase 5 - Check Cyl groups SUMMARY INFORMATION BAD SALVAGE? yes BLK(S) MISSING IN BIT MAPS SALVAGE? yes FREE BLK COUNT(S) WRONG IN SUPERBLK SALVAGE? yes 23391 files, 3557988 used, 16753410 free (4562 frags, 2093606 blocks, 0.0% fragmentation) ***** FILE SYSTEM MARKED CLEAN ***** ***** FILE SYSTEM WAS MODIFIED ***** [root@dsX ~]# fsck -y /dev/da2s2d ** /dev/da2s2d ** Last Mounted on /opt ** Phase 1 - Check Blocks and Sizes ** Phase 2 - Check Pathnames ** Phase 3 - Check Connectivity ** Phase 4 - Check Reference Counts ** Phase 5 - Check Cyl groups 23391 files, 3557988 used, 16753410 free (4562 frags, 2093606 blocks, 0.0% fragmentation) [root@dsX ~]# mount /dev/da2s2d /mnt/disk/ [root@dsX ~]# ls -la /mnt/disk/ total 36 drwxr-xr-x 8 root wheel 512 Oct 7 2008 . drwxr-xr-x 3 root wheel 512 Oct 14 18:19 .. -rw-r--r-- 1 root wheel 33 Oct 7 2008 .amanda.excludes drwxrwxr-x 2 root operator 512 Oct 7 2008 .snap drwxr-xr-x 3 root wheel 512 Oct 7 2008 cache drwxr-xr-x 9 root wheel 512 Oct 11 2008 logs drwxr-xr-x 4 root wheel 512 Oct 7 2008 mail drwxr-x--- 3 root wheel 512 Oct 7 2008 mysql_backup drwxr-x--- 3 wwwserver www 512 Oct 7 2008 squirrel
Все...
ЕСли не помогло - вероятно, проблема не в слайсах, а в BSD-partitions Пробуем проанализировать ситуацию с помощью утилит восстановления диска. Опять же работаем только копией поврежденного диска! Устанавливаем полезные утилиты: *gpart*,*testdisk*,*scan_ffs*..
89 export PACKAGESITE=http://ftp.ua.freebsd.org/pub/FreeBSD/ports/i386/packages-6.3-release/Latest/ [root@dsX ~]# env SHELL=/usr/local/bin/bash TERM=xterm PACKAGESITE=http://ftp.ua.freebsd.org/pub/FreeBSD/ports/i386/packages-6.3-release/Latest/ USER=root SUDO_USER=john SUDO_UID=1154 USERNAME=root MAIL=/var/mail/john PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin:/usr/home/john/bin PWD=/usr/home/john LANG=ru_RU.KOI8-R SHLVL=1 SUDO_COMMAND=/usr/local/bin/bash HOME=/usr/home/john LOGNAME=root SUDO_GID=1154 LC_TIME=C _=/usr/bin/env 80 pkg_add -r testdisk 90 pkg_add -r scan_ffs 91 pkg_add -r gpart 100 pkg_add -r magicrescue
после того как данные залились на da2 смотрим информацию о разделах:
[root@dsX ~]# bsdlabel /dev/da2s1 # /dev/da2s1: 8 partitions: # size offset fstype [fsize bsize bps/cpg] a: 2097152 0 4.2BSD 2048 16384 28552 b: 4194304 2097152 swap c: 18860247 0 unused 0 0 # "raw" part, don't edit d: 2097152 6291456 4.2BSD 2048 16384 28552 e: 6291456 8388608 4.2BSD 2048 16384 28552 f: 4180182 14680064 4.2BSD 2048 16384 28552
Сохраняем ее в файле, в случае чего можем восстановить.
[root@dsX ~]# cat correct_bsdlabel_da2s1 >bsdlabel_da2s1 [root@dsX ~]# bsdlabel -R -m i386 /dev/da2s1 bsdlabel_da2s1
Для *da2s2* нет файла устройства, поэтому посмотреть инфо мы не можем. Интересная утилитка scan_ffs помогает нам частично увидеть таблицу разделов:
scan_ffs -l /dev/da2 > /tmp/da2label [root@dsX ~]# cat /tmp/da2label X: 2097152 63 4.2BSD 2048 16384 0 # / X: 2097152 6291519 4.2BSD 2048 16384 0 # /tmp X: 6291456 8388671 4.2BSD 2048 16384 0 # /var X: 4180180 14680127 4.2BSD 2048 16384 0 # /usr X: 20971520 60803366 4.2BSD 2048 16384 0 # X: 406617176 81774886 4.2BSD 2048 16384 0 # X: 41943040 102746390 4.2BSD 2048 16384 0 # /db X: 314572800 123717910 4.2BSD 2048 16384 0 # /tmp/setup.741/home X: 335541612 144689430 4.2BSD 2048 16384 0 # /home X: 50101352 438290710 4.2BSD 2048 16384 0 # /tmp/setup.741/opt
Но здесь нет информации о разделе c:unused, который является обязательным при создании slice. Кроме того, слайсов у нас два. утилита *testdisk* подходит в случае повреждения информации о слайсах.
You should choose Intel, but testdisk repairs/recreates missing/corrupted MBRs (BIOS partitions/BSD slices), so it won't fix your problem (BSD partitions). And AFAIK, it's file recovery doesn't understand UFS.
Но прогнав ее видим, что тесты проходят успешно, и разделы недоступны для редактирования. gpart показывает много полезной информации, но опять же только о слайсах.
[root@dsX ~]# gpart /dev/da2 Begin scan... Possible partition(*BSD disklabel), size(9209mb), offset(0mb) Possible partition(*BSD disklabel), size(225278mb), offset(9209mb) * Warning: short read near sector(488396979), 64512 bytes instead of 66048. Skipping... End scan. Checking partitions... Partition(FreeBSD/NetBSD/386BSD): primary Partition(FreeBSD/NetBSD/386BSD): primary Ok. Guessed primary partition table: Primary partition(1) type: 165(0xA5)(FreeBSD/NetBSD/386BSD) size: 9209mb #s(18860247) s(63-18860309) chs: (0/1/1)-(1023/254/63)d (0/1/1)-(1173/254/63)r Primary partition(2) type: 165(0xA5)(FreeBSD/NetBSD/386BSD) size: 225278mb #s(461370735) s(18860310-480231044) chs: (1023/254/63)-(1023/254/63)d (1174/0/1)-(29892/254/63)r Primary partition(3) type: 000(0x00)(unused) size: 0mb #s(0) s(0-0) chs: (0/0/0)-(0/0/0)d (0/0/0)-(0/0/0)r Primary partition(4) type: 000(0x00)(unused) size: 0mb #s(0) s(0-0) chs: (0/0/0)-(0/0/0)d (0/0/0)-(0/0/0)r
fbsd/posts/fdisk-recovery -- Last updated 2010-04-27 Tuesday 14:50:26 Edit
© copyright 2010
Design by: lev