PyChess & this list
Natrio
Проделанная работа впечатляет! :)
Спасибо! Действительно пришлось поразбираться. Однако сейчас, посмотрев по-подробнее, что же там восстановилось, обнаружил, что, к сожалению, далеко не всё. Видимо inode'ы потёр :(

Natrio
Кстати, насколько я понимаю, терабайтный винчестер достаточно новый, чтобы иметь физические сектора по 4Кб, а не по 512. У вас такой?
Нет, сектор винчестера равен 512 байт (жесткий диск Seagate ST31000528AS). Я вроде и не писал, что он 4Кб. Но вот блок файловой системы как раз равен 4Кб.

Natrio
Если да, то выравнивание начала по 63-му сектору, мягко говоря, неоптимально, так как приводит к многократным лишним перезаписям больших физических секторов целиком (иначе винчестер просто не умеет) при запросах на запись мелкими блоками. Это одна из причин, почему нынешние версии fdisk выравнивают его по 2048.
Спасибо, учтём!
Ну что же, пора рассказать общественности, чего удалось добиться.

1. backup
Сделал резервную копию всего содержимого винта с помощью
dd if=/dev/sdc of=first.665600M.img bs=1M count=665600
dd if=/dev/sdc of=second.img bs=1M skip=665600
Два файла нужны, т.к. ещё одного винта на терабайт под рукой не было :)
К счастью они так и не понадобились.
Хочу заметить, что для того, чтобы сделать полную копию диска требуется 1 Тб/30 Мб/с ~ 9 часов. Столько же нужно чтобы осуществить поиск всех резервных суперблоков.

2. Теория
Файловая система XFS состоит из определённого количества равных (по размеру) линейных областей (Allocation Groups, AG). В первом секторе каждой области содержится резервная копия суперблока. В том числе там есть информация о размере блока файловой системы и количестве блоков в линейной области. Таким образом, чтобы правильно найти начало файловой системы надо найти резервный суперблок и посчитать. Как я уже говорил, xfs_repair находит резервные суперблоки, но к сожалению он не показывает их смещение. Можно было бы просто пропатчить xfs_repair (что я в конце концов и сделал, когда знал где находятся резервные суперблоки, чтобы не ждать, когда-же он их найдёт), чтобы он выводил их смещения, но почему-то я пошёл другим путём.
Умная мысля приходит опосля…

4. Поиск резервных суперблоков
Я написал свою программку для поиска резервный суперблоков, которая базируется на коде xfs_repair. Её в отличие от xfs_repair можно запустить для поиска не с начала винта.
В результате получил
$ ./xfs_find2 /dev/sdc
...
249585324818 Bad!
250050592256 Good! <== x[1]
260209783852 Bad!
...
500101152256 Good! <== x[2]
500122680408 Bad!
500122681432 Bad!
...
750151712256 Good! <== x[3]
752991753762 Bad!
...

4. Начало раздела
Как мы видим, резервные суперблоки (которые находятся в первых секторах AG) разнесены на одинаковое расстояние х - x = x - x = 250050560000 байт. Отсюда сразу получаем, что x = x - 250050560000 = 32256 байт = 63 сектора по 512 байт. Это можно было бы получить и по данным только из первого резервного суперблока.

5. Разметка диска
Дальше меня постигло удивление, т.к. fdisk сказал, что не может сделать начало раздела ближе ближе чем за 2048 секторов к началу диска. Зачем он так?! Но потом я попробовал GNOMEовскую утилиту palimpsest (которой я видимо и размечал диск при создании файловой системы давным давно). Она как раз и создала мне раздел с началом на 63 секторе.
         ---Starting----      ----Ending-----    Start     Number of
 # Flags Head Sect  Cyl   ID  Head Sect  Cyl     Sector    Sectors
-- ----- ---- ---- ----- ---- ---- ---- ----- ----------- -----------
 1  0x00    1    1     0 0x83  254   63 121600          63  1953520002
 2  0x00    0    0     0 0x00    0    0     0           0           0
 3  0x00    0    0     0 0x00    0    0     0           0           0
 4  0x00    0    0     0 0x00    0    0     0           0           0

6. xfs_repair
Дальше дело техники… только вот inode директорий померли :'(
$ ls /media/xstorage/lost+found/
1101323398  1216930076  1274854120  1274952689  1423960091  2148008074  2162589437  2271242199  2313526542  3266918421  3471642994  3485086100  3485086107
1101323406  1272669718  1274854129  1274952805  1525581380  2148008086  2210583206  2271242205  2313526550  3367416112  3471642995  3485086101  3485086108
1101323438  1274854099  1274854134  1274952808  1525581385  2148008088  2260331123  2271249026  2318579471  3367457749  3485086009  3485086102  3485086109
1101323441  1274854105  1274854220  1274952825  1525581429  2148008103  2271222561  2271249429  2569989242  3367458891  3485086093  3485086103  3485086110
1101323444  1274854109  1274941202  1289743602  1525581431  2162589248  2271222571  2271249447  2569989244  3471639947  3485086095  3485086104  3485086111
1101323452  1274854113  1274949988  1293517685  1525581434  2162589407  2271222596  2271249454  2569989250  3471642985  3485086098  3485086105  3524920346
1198910646  1274854117  1274952672  1423960084  2148008064  2162589428  2271222597  2298165469  3221225606  3471642993  3485086099  3485086106  3653777712

7. Что осталось сделать
  • Отределить, потёрлись ли какие-нибудь файлы нулями. Это можно сделать либо внимательно почитав вывод xfs_repair, либо помучив xfs_db.
  • Может ли повлиять на что-нибудь тот факт, что в таблице разделов размер sdc1 равен 1953520002*512 = 1000202241024, а по данным суперблоков он равен 250050560000*4 = 1000202240000?

    Внимание!Код xfs_find2.c был протестирован под x86_64. Что будет под i686, я не знаю. Чтобы скомпилировать программу, надо в ту же директорию, где xfs_find2.c, распаковать xfsprogs.

    p.s. Пользуясь случаем, поздравляю всех с Новым Годом! Поменьше вам ошибок!
Резервные суперблоки xfs_repair находит. Главное правильно найти начало раздела…
Здравствуйте!
Есть винт на 1 Тб с одним XFS разделом (файловая помойка).
Случайно была выполнена операция аналогичная следующей:
dd if=/dev/zero of=/dev/sdb bs=512  count=128
Никаких бекапов нет.
Вопрос: как восстановить файловую систему?
Пробовал прогонять TestDisk. Разделов он не находит.
Безопасно ли запускать xfs_repair /dev/sdc? Всё-таки смещения относительно начала устройства будут другими…
Хм… Ну единственное, что мне приходит в голову - это посмотреть в каких файлах используется XSLoader.
grep -Rl "require XSLoader" /usr/{lib,share}/perl5/{site,vendor}_perl/*
И ещё, я так понимаю ты поставил Data::Dumper через cpan (раз он у тебя в site_perl)? Попробуй его удалить. Он уже должен быть в core.
$ corelist Data::Dumper
Data::Dumper was first released with perl 5.005
И да, соглашусь с tchgefest, если тебе нужна более новая версия Data::Dumper, чем в core, то лучше использовать community/perl-data-dumper.
При обновлении перла нужно перекомпилить все пакеты с XS.
Насколько я помню, Data::Dumper вообще в core, его отдельно устанавливать не надо. (Под рукой нет, могу ошибаться.)
А что ты их из репозиториев/AUR не ставишь? Меньше проблем бы было.
См. также
bobart
Нет, нету эмблем. Чем больше выпилят - тем стабильнее работа. Так держать.
:D Они, вообще-то, никогда (на моей памяти) не глючили.
wlad_o
Здравствуйте, с наступающим!
После переустановки арча настала очередь поставить evince.
При установке потянул за собой сабж. Поставился, а запускаться
не хочет, пишет, что не могут одновременно работать gtk+ 3 и gtk+ 2.
Про gtk1 почему-то молчит, хотя он в системе присутствует.
Пришлось удалить gtk+ 3 и evince, поставил временно xpdf.
Какая версия evince?
Стоит одновременно gtk2 и gtk3. evince работает. Последние версии требуют только gtk3.
wlad_o
С прошлым, 37ядром evince ставился и запускался без проблем.
От ядра это вообще зависеть не может.
wlad_o
Что посоветуете?
Обновить систему. Только осторожно, если стоит Gnome 2, то он обновиться до Gnome 3 (это может быть не безобидно).
У кого-нибудь Nautilus показывает эбмлемы?
Такое впечатление, что возможность уставанлавать эмблемы и коментарии попросту выпилили (возможно временно). Не смог найти никакой информации или сообшений об ошибках на эту тему. Кто-нибудь что-нибудь знает по этому вопросу?