Страница 1 из 1
Как восстановить freebsd раздел?
Добавлено: 2010-03-12 20:51:32
Termitnik
Жесткий диск разбит на три раздела: слайс freebsd, fat32, ntfs. После неизвестного события, слайс freebsd пропал, bootmanager его не видит, в sysinstall обозначен как неиспользуемый.
Как-то можно восстановить?
Re: Как восстановить freebsd раздел?
Добавлено: 2010-03-12 21:17:32
xelplogoog
какое еще нафик неизвестное событие? выкладывай лучше начистоту что вытворял там, больше шансов что тебе помогут
телепаты щас все в тайланде
Re: Как восстановить freebsd раздел?
Добавлено: 2010-03-12 21:38:53
_Gendos_^..^_
....что он делал винду переустановил...
Re: Как восстановить freebsd раздел?
Добавлено: 2010-03-12 22:28:39
__XeNoN__
В своё время при попытке установить NetBSD рядом с FreeBSD, нетка затёрла мне таблицу слайсов фряшных.
Для восстановления данных использовал утилиту /usr/ports/sysutils/scan_ffs/, она сканирует диск на предмет UFS/FFS разделов. Говорят, что по её выводу можно восстановить таблицу слайсов с помощью disklabel. Но т.к я disklabel не осилил, а потерять данные в случае ошибочного её использования не хотелось, то пришлось идти более извращённым путём.
С помощью scan_ffs определил с какого смещения на диске начинаются фряшные разделы. Затем с помощью gnop создал GEOM provider поверх интересующего диска, указав смещение, размер интересующего раздела и выставив (r/w)failprob в 0. На выходе получил в /dev/ устройство <имя диска>.nop, которое покрывает нужный мне раздел, соответственно его можно монтировать и спасать нужные данные.
Re: Как восстановить freebsd раздел?
Добавлено: 2010-03-13 16:36:21
Termitnik
У меня фришный раздел был первым на диске. Значит там смещение 0?
Re: Как восстановить freebsd раздел?
Добавлено: 2010-03-13 17:58:51
xelplogoog
а как же главная загрузочная запись, которая занимает первый цилиндр или 63 сектора?

Re: Как восстановить freebsd раздел?
Добавлено: 2010-03-13 18:45:41
Termitnik
на других машинах bsdlabel показывает нулевое смещение.
Код: Выделить всё
# bsdlabel ad6s1
# /dev/ad6s1:
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
a: 4194304 0 4.2BSD 2048 16384 28528
b: 3206305 153092096 swap
c: 156298401 0 unused 0 0 # "raw" part, don't edit
d: 142606336 4194304 4.2BSD 2048 16384 28520
e: 4194304 146800640 4.2BSD 2048 16384 28528
f: 2097152 150994944 4.2BSD 2048 16384 28528
Re: Как восстановить freebsd раздел?
Добавлено: 2010-03-13 19:26:19
__XeNoN__
Ну к примеру на моей машине:
Код: Выделить всё
[XeNoN:XeNoN]# ls /dev
acd0 ad4s3b audit cuaU0.init cuau1.lock fd/ klog midistat ppi0 stdout@ ttyu0.lock ttyv3 ttyva ugen0.1@ ums0
acpi ad4s3d bpf cuaU0.lock dcons fido kmem mixer0 ptmx sysmouse ttyu1 ttyv4 ttyvb ugen1.1@ urandom@
ad4 ad4s3e bpf0@ cuau0 devctl geom.ctl log@ mixer1 pts/ ttyU0 ttyu1.init ttyv5 ttyvc ugen1.2@ usb/
ad4s1 ad4s3f console cuau0.init devstat io lpt0 mixer2 random ttyU0.init ttyu1.lock ttyv6 ttyvd ugen1.3@ usbctl
ad4s2 agpgart consolectl cuau0.lock dgdb kbd0@ lpt0.ctl nfslock sndstat ttyU0.lock ttyv0 ttyv7 ttyve ugen2.1@ xpt0
ad4s3 ata ctty cuau1 dri/ kbd1@ mdctl null stderr@ ttyu0 ttyv1 ttyv8 ttyvf ugen3.1@ zero
ad4s3a atkbd0 cuaU0 cuau1.init dsp0.0 kbdmux0 mem pci stdin@ ttyu0.init ttyv2 ttyv9 ufsid/ ugen4.1@
[XeNoN:XeNoN]# df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ad4s3a 496M 164M 292M 36% /
devfs 1.0K 1.0K 0B 100% /dev
/dev/ad4s3d 989M 6.9M 903M 1% /tmp
/dev/ad4s3f 15G 4.0G 9.5G 30% /usr
/dev/ad4s3e 989M 465M 445M 51% /var
/dev/ad4s2 103G 11G 83G 12% /home
[XeNoN:XeNoN]# bsdlabel /dev/ad4s3
# /dev/ad4s3:
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
a: 1048576 0 4.2BSD 0 0 0
b: 2097152 1048576 swap
c: 39070080 0 unused 0 0 # "raw" part, don't edit
d: 2097152 3145728 4.2BSD 0 0 0
e: 2097152 5242880 4.2BSD 0 0 0
f: 31730048 7340032 4.2BSD 0 0 0
ad4s3 - это третий primary DOS раздел. Представим себе ситуация, что DOS разделы есть, т.е их таблица разделов сохранилась. А таблица слайсов слетела, т.е bsdlabel нам ничего не выдаёт.
Запускаем scan_ffs.
Код: Выделить всё
[XeNoN:~]# scan_ffs /dev/ad4s3
ufs2 at 0 size 262144 mount / time Tue Oct 27 15:54:56 2009
ufs2 at 3145728 size 524288 mount /tmp time Tue Oct 27 15:54:56 2009
ufs2 at 5242880 size 524288 mount /var time Tue Oct 27 15:54:57 2009
ufs2 at 7340032 size 7932512 mount /usr time Tue Oct 27 15:54:56 2009
Как видно, все разделы фряшные нашлись. Для примера я хочу восстановить данные с d раздела
Код: Выделить всё
d: 2097152 3145728 4.2BSD 0 0 0
или
ufs2 at 3145728 size 524288 mount /tmp time Tue Oct 27 15:54:56 2009
Теперь создаём GEOM NOP девайс.
Код: Выделить всё
gnop create -o 1610612736 -r 0 -w 0 -s 1073741824 /dev/ad4s3
bsdlabel и scanffs выдаёт смещение и размер раздела в
секторах, размер сектора обычно 512 байт, а gnop принимает их в байтах, поэтому не забываем переконвертировать значения.
Код: Выделить всё
[XeNoN:~]# gnop create -o 1610612736 -r 0 -w 0 -s 1073741824 /dev/ad4s3
[XeNoN:~]# fsdb /dev/ad4s3.nop
** /dev/ad4s3.nop (NO WRITE)
Editing file system `/dev/ad4s3.nop'
Last Mounted on /tmp
current inode: directory
I=2 MODE=41777 SIZE=1536
BTIME=Sep 17 23:50:26 2009 [0 nsec]
MTIME=Mar 13 17:19:52 2010 [0 nsec]
CTIME=Mar 13 17:19:52 2010 [0 nsec]
ATIME=Mar 13 17:45:02 2010 [0 nsec]
OWNER=root GRP=wheel LINKCNT=17 FLAGS=0 BLKCNT=4 GEN=50d2939a
fsdb (inum: 2)> ls
slot 0 ino 2 reclen 12: directory, `.'
slot 1 ino 2 reclen 12: directory, `..'
slot 2 ino 3 reclen 16: directory, `.snap'
slot 3 ino 23592 reclen 20: directory, `.X11-unix'
slot 4 ino 94219 reclen 20: directory, `.XIM-unix'
slot 5 ino 23593 reclen 20: directory, `.ICE-unix'
slot 6 ino 94220 reclen 20: directory, `.font-unix'
slot 7 ino 23553 reclen 20: directory, `tmux-1001'
slot 8 ino 23559 reclen 20: directory, `mc-XeNoN'
Ну собственно вместо fsdb просто монтируем
Скатываем нужные данные.
Есть один неприятный момент. Толи утилита gnop хреновая, толи libgeom, толи gnop.ko, но передать в качестве параметров gnop больше 2^32 неполучится. Поэтому я правил исходники gnop.ko, жестко забивая в него необходимые смещение и размер, когда мне надо было добраться для раздела большого размера.
Re: Как восстановить freebsd раздел?
Добавлено: 2010-03-13 20:18:08
Termitnik
Спасибо за ответ, суть я понял.
Проблема в том, что после исчезновения фришного раздела его цифру взял следующий за ним fat раздел.
Т.е. фришный раздел был ad6s1, а теперь ad6s1 это fat раздел.

Re: Как восстановить freebsd раздел?
Добавлено: 2010-03-13 21:00:34
__XeNoN__
Попробуй натравить scan_ffs на весь диск ad6, тогда просто смещение будет относительно начала диска. И gnop применять надо будет к ad6 соответственно.
Re: Как восстановить freebsd раздел?
Добавлено: 2010-03-14 3:38:29
Termitnik
bsdlabel и scanffs выдаёт смещение и размер раздела в секторах, размер сектора обычно 512 байт, а gnop принимает их в байтах, поэтому не забываем переконвертировать значения.
В ваших листингах bsdlabel выдает размер в 4 раза больший чем scan_ffs, на моем диске будет так же?
Re: Как восстановить freebsd раздел?
Добавлено: 2010-03-14 14:46:59
__XeNoN__
Да, ошибочка закралась, я не внимателен.
Видимо scan_ffs выдаёт размер в количестве фрагментов файловой системы. Тогда размер выдаваемый bsdlabel и scan_ffs в пересчёте в байты одинаковый. Смещение везде выдаётся в секторах.
Если при создании системы не указывались специальные флаги и не менялся размер фрагмента, то он по умолчанию 2048 байт.
Код: Выделить всё
The fragment size of the file system in bytes. It must be a
power of two ranging in value between blocksize/8 and blocksize.
The default is 2048 bytes.
Re: Как восстановить freebsd раздел?
Добавлено: 2010-03-16 5:19:34
Termitnik
__XeNoN__ , спасибо большое за помощь, разобрался и все восстановил.
scan_ffs, правда, не пригодился - сделал всё fdisk'ом: заново создал пропавший слайс указав размер и смещение.
Re: Как восстановить freebsd раздел?
Добавлено: 2010-03-16 18:43:30
mvalery
Я пользуюсь программой TestDisk.
http://www.cgsecurity.org/wiki/TestDisk
Про нее хорошо написано в журнале Linux Format №2 2010.
Программа входит так же в состав LiveCD:
http://www.sysresccd.org/Main_Page
TestDisk два или три раза помог мне восстановить убитую таблицу разделов.