Как восстановить freebsd раздел?

Все вопросы по установке, обновлению и эксплуатации FreeBSD: конфигурация и сопровождение.

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Termitnik
сержант
Сообщения: 169
Зарегистрирован: 2008-04-05 20:09:45
Откуда: Киев

Как восстановить freebsd раздел?

Непрочитанное сообщение Termitnik » 2010-03-12 20:51:32

Жесткий диск разбит на три раздела: слайс freebsd, fat32, ntfs. После неизвестного события, слайс freebsd пропал, bootmanager его не видит, в sysinstall обозначен как неиспользуемый.
Как-то можно восстановить?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
xelplogoog
мл. сержант
Сообщения: 134
Зарегистрирован: 2010-01-02 12:14:56

Re: Как восстановить freebsd раздел?

Непрочитанное сообщение xelplogoog » 2010-03-12 21:17:32

какое еще нафик неизвестное событие? выкладывай лучше начистоту что вытворял там, больше шансов что тебе помогут
телепаты щас все в тайланде
/usr/ports/x11/yakuake-kde4 user

_Gendos_^..^_
проходил мимо

Re: Как восстановить freebsd раздел?

Непрочитанное сообщение _Gendos_^..^_ » 2010-03-12 21:38:53

....что он делал винду переустановил...

__XeNoN__
проходил мимо
Сообщения: 8
Зарегистрирован: 2010-03-12 22:00:27

Re: Как восстановить freebsd раздел?

Непрочитанное сообщение __XeNoN__ » 2010-03-12 22:28:39

В своё время при попытке установить NetBSD рядом с FreeBSD, нетка затёрла мне таблицу слайсов фряшных.
Для восстановления данных использовал утилиту /usr/ports/sysutils/scan_ffs/, она сканирует диск на предмет UFS/FFS разделов. Говорят, что по её выводу можно восстановить таблицу слайсов с помощью disklabel. Но т.к я disklabel не осилил, а потерять данные в случае ошибочного её использования не хотелось, то пришлось идти более извращённым путём.
С помощью scan_ffs определил с какого смещения на диске начинаются фряшные разделы. Затем с помощью gnop создал GEOM provider поверх интересующего диска, указав смещение, размер интересующего раздела и выставив (r/w)failprob в 0. На выходе получил в /dev/ устройство <имя диска>.nop, которое покрывает нужный мне раздел, соответственно его можно монтировать и спасать нужные данные.

Termitnik
сержант
Сообщения: 169
Зарегистрирован: 2008-04-05 20:09:45
Откуда: Киев

Re: Как восстановить freebsd раздел?

Непрочитанное сообщение Termitnik » 2010-03-13 16:36:21

У меня фришный раздел был первым на диске. Значит там смещение 0?

Аватара пользователя
xelplogoog
мл. сержант
Сообщения: 134
Зарегистрирован: 2010-01-02 12:14:56

Re: Как восстановить freebsd раздел?

Непрочитанное сообщение xelplogoog » 2010-03-13 17:58:51

а как же главная загрузочная запись, которая занимает первый цилиндр или 63 сектора? :)
/usr/ports/x11/yakuake-kde4 user

Termitnik
сержант
Сообщения: 169
Зарегистрирован: 2008-04-05 20:09:45
Откуда: Киев

Re: Как восстановить freebsd раздел?

Непрочитанное сообщение Termitnik » 2010-03-13 18:45:41

на других машинах 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

__XeNoN__
проходил мимо
Сообщения: 8
Зарегистрирован: 2010-03-12 22:00:27

Re: Как восстановить freebsd раздел?

Непрочитанное сообщение __XeNoN__ » 2010-03-13 19:26:19

Ну к примеру на моей машине:

Код: Выделить всё

[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 просто монтируем

Код: Выделить всё

mount -o ro /dev/ad4s3.nop /mnt
Скатываем нужные данные.

Есть один неприятный момент. Толи утилита gnop хреновая, толи libgeom, толи gnop.ko, но передать в качестве параметров gnop больше 2^32 неполучится. Поэтому я правил исходники gnop.ko, жестко забивая в него необходимые смещение и размер, когда мне надо было добраться для раздела большого размера.

Termitnik
сержант
Сообщения: 169
Зарегистрирован: 2008-04-05 20:09:45
Откуда: Киев

Re: Как восстановить freebsd раздел?

Непрочитанное сообщение Termitnik » 2010-03-13 20:18:08

Спасибо за ответ, суть я понял.
Проблема в том, что после исчезновения фришного раздела его цифру взял следующий за ним fat раздел.
Т.е. фришный раздел был ad6s1, а теперь ad6s1 это fat раздел.
:unknown:

__XeNoN__
проходил мимо
Сообщения: 8
Зарегистрирован: 2010-03-12 22:00:27

Re: Как восстановить freebsd раздел?

Непрочитанное сообщение __XeNoN__ » 2010-03-13 21:00:34

Попробуй натравить scan_ffs на весь диск ad6, тогда просто смещение будет относительно начала диска. И gnop применять надо будет к ad6 соответственно.

Termitnik
сержант
Сообщения: 169
Зарегистрирован: 2008-04-05 20:09:45
Откуда: Киев

Re: Как восстановить freebsd раздел?

Непрочитанное сообщение Termitnik » 2010-03-14 3:38:29

bsdlabel и scanffs выдаёт смещение и размер раздела в секторах, размер сектора обычно 512 байт, а gnop принимает их в байтах, поэтому не забываем переконвертировать значения.
В ваших листингах bsdlabel выдает размер в 4 раза больший чем scan_ffs, на моем диске будет так же?

__XeNoN__
проходил мимо
Сообщения: 8
Зарегистрирован: 2010-03-12 22:00:27

Re: Как восстановить freebsd раздел?

Непрочитанное сообщение __XeNoN__ » 2010-03-14 14:46:59

Да, ошибочка закралась, я не внимателен.
Видимо 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.

Termitnik
сержант
Сообщения: 169
Зарегистрирован: 2008-04-05 20:09:45
Откуда: Киев

Re: Как восстановить freebsd раздел?

Непрочитанное сообщение Termitnik » 2010-03-16 5:19:34

__XeNoN__ , спасибо большое за помощь, разобрался и все восстановил.
scan_ffs, правда, не пригодился - сделал всё fdisk'ом: заново создал пропавший слайс указав размер и смещение.

mvalery
рядовой
Сообщения: 39
Зарегистрирован: 2008-07-23 12:46:12

Re: Как восстановить freebsd раздел?

Непрочитанное сообщение mvalery » 2010-03-16 18:43:30

Я пользуюсь программой TestDisk. http://www.cgsecurity.org/wiki/TestDisk
Про нее хорошо написано в журнале Linux Format №2 2010.
Программа входит так же в состав LiveCD: http://www.sysresccd.org/Main_Page

TestDisk два или три раза помог мне восстановить убитую таблицу разделов.