Як відновити розділ BTRFS, який не змонтується?


13

Установка на 12.04 не вдавалася, і рішенням було встановити, щоб інсталятор ігнорував розділ btrfs, який я раніше використовував для / home.

Тепер, коли він встановлений, я намагався змусити його встановити розділ btrfs, щоб я міг отримати доступ до своїх 70 ГБ файлів. Він не буде монтуватися, і btrfsck помилки виконуються за допомогою наступних трьох рядків:

parent transid verify failed on 31302336512 wanted 62455 found 62456
parent transid verify failed on 31302336512 wanted 62455 found 62456
parent transid verify failed on 31302336512 wanted 62455 found 62456

Може хтось, скажіть, будь ласка, як змусити цей розділ працювати? Я читав в Інтернеті, що я, ймовірно, можу відновити дані, використовуючи btrfs-Restost, але не можу знайти цю програму ніде.

Відповіді:


10

Найпростіший спосіб

btrfs-zero-log /dev/sda5

Ви отримуєте цю проблему, оскільки транзакція (запис або видалення) застрягла в журналі журналу і диск не відповідає їй.

Як це працює:

Отже, коли дані записуються першими, вони записуються в журнал, потім на диск (або в той же час, але журнал просто зберігає метадані про майбутнє записування - не впевнений ... потрібні додаткові дослідження в цій частині) ...

У всякому разі , якщо відключити систему в середині цього запис / видалення або зробити що - то hickups системи (демонтувати USB , який тримає ваш Btrfs точки монтування), а потім , коли він повертається , що кріплення не будуть працювати вона НЕ буде виконана ( dmesg і btrfsck буде покажіть вам помилки більш докладно) ...

Дивлячись на dmesg, ви побачите ті самі транзитні повідомлення.

Ви побачите щось подібне:

parent transid verify failed on 109973766144 wanted 1823 found 1821

Це означає, що btrfs хотів передати 1826 р. (Це було в журналі), але на диску він побачив 1821 р. Отже, диск був за 2 транзакції від синхронізації з журналом. Я особисто ризикнув би тут brtfs-zero-log тільки тому, що це лише 2 транзакції. Але щоб бути на 100% безпечним, якщо це ваші єдині дані (до речі, якщо у вас є критичні дані, ви НІКОЛИ НІКОЛИ не матимете лише 1 копії, завжди майте копію / резервну копію в безпечному іншому місці - звинувачуйте творців btrfs не хочу Виправдайте проти власного безвідповідальності не мати резервної копії - btrfs не є резервним рішенням, його файлова система - ніщо не є справжнім рішенням резервного копіювання, крім того, щоб мати копію іншого місця, де - навіть парність чи дзеркальні диски, справжня резервна копія - це сидячи десь під землею в Альпах, поки його активна копія знаходиться у вашому офісі в Техасі)

parent transid verify failed on 31302336512 wanted 62455 found 62456

Тут журнал хоче 62455, але диск випереджає 62456, тож у вашому випадку я просто очистить журнал. Журнал цього разу не оновлювався. Знову я сказав вам, що це безпечна річ, якщо це ваші єдині дані та її мегакритичний (ганьба на вас), і я б зробив нижчезазначені операції, щоб спочатку бути в безпеці.

Запуск btrfsck / dev / sda5 (який, до речі, просто перевіряє читання таким чином, що він повністю безпечний, його єдині варіанти btrfsck, про які вам доведеться турбуватися), також покажуть вам ці повідомлення.

Але будьте обережні, якщо ці дані є критичними, я б спершу зробив це (як казали інші представники)

mount -t btrfs -o rootflags=recovery,nospace_cache /dev/sda3 /mnt/sda3

mount -t btrfs -o rootflags=recovery,nospace_cache,clear_cache /dev/sda3 /mnt/sda3

mount -t btrfs -o recovery,nospace_cache,nospace_cache /dev/sda3 /mnt/sda3

Потім cp або rsync всі ваші файли перейдіть до безпечного місця, тоді, коли безпечно робити btrfs-zero-log, якщо його успішна операція ви просто витратили багато часу на резервну копію вашої системи (але якщо її не вдалося, ви просто зберегли свій дупа)

Тоді якщо кріплення не вдалося відновити btrfs (скидання системи, як я розумію, її поновлювана операція, однак вона постійно запитує Y або y, тому слідкуйте за результатами)

btrfs restore /dev/sda5 /USB

Тоді, коли безпечно (коли буде відновлено btrfs) зробіть btrfs-zero-log, якщо його успішна операція ви просто витрачала багато часу на резервну копію вашої системи (але якщо її не вдалося, ви просто зберегли свою дупу)

Ви можете запустити екран першим

screen /bin/bash

btrfs restore /dev/sda5 /USB

ЕКРАННА БІЛОТКА

Щоб від'єднатись (команда все одно буде запущена): CONTROL-a тоді введіть ": detach" без лапок, а потім натисніть клавішу ENTER

Інший спосіб від'єднати: Потім закрийте шпаклівку або ваш термінал, і він від'єднається (команда / відновлення все ще буде виконуватися).

Щоб перевірити його, просто поверніться до екрана:

screen -x

екран -x буде приєднаний до сеансів, навіть якщо від'єднаний, і на відміну від -h каже, він буде додаватись, навіть якщо його вже додано)

Якщо у вас кілька екранів, екран -x скаже, що вам потрібно бути більш конкретними, щоб додати сеанс:

screen -ls

Я перераховую всі сеанси, легко це запам'ятати.

щоб побачити PID, ви також можете зробити це:

ps aux | grep screen

Виявивши PID, запустіть екран так:

screen -x PID

Це буде приєднано до конкретного сеансу. Ви можете мати кілька сеансів / puttys, прикріплених до одного екрану (вони будуть виводити один і той же текст, ви можете вводити команди в одній, а вони відображатимуться в іншій шпаклівці)


7

Встановити завантаження за допомогою параметрів кріплення root fs:

rootflags=recovery,nospace_cache

або

rootflags=recovery,nospace_cache,clear_cache

Повний список параметрів монтажу btrfs повинен бути тут https://btrfs.wiki.kernel.org/index.php/Mount_options та інші речі можуть бути корисними також, наприклад, у режимі noatime, nodatacow (виправлена ​​помилка ядра для мене, що дає мені шанс скопіювати мої файли).

Додайте його до grub.cfg / menu.lst або введіть його під час завантаження.

Завдання nospace_cache зроблять справи надзвичайно повільними. Просто завантажтесь, зачекайте (довго), вимкніть та завантажтесь нормально.

У мене було те саме саме кілька днів тому, і вище це виправлено. Але також після цього виникли певні проблеми з космосом ... про місце, про яке йдеться, не 100%, але все-таки це можливо сказати, що він не в космосі.

==

Я думаю, ви також можете додати ті самі параметри, наприклад, у свій fstab:

UUID=0237alksfadg-lhdfkj3624-4fdfjb-9dsfe2d-dfddaf /home btrfs defaults,recovery,nospace_cache,clear_cache,subvol=@home 0  
 2

Якщо ви намагалися відновити / home каталог, встановлений на розділі з UUID=0237alksfadg-lhdfkj3624-4fdfjb-9dsfe2d-dfddaf.


Чому два nospace_cache?
CVn

це був помилковий помилок
Петро

:) Ви просто врятували резервну копію!
дерфлокі

1

Відповідь Петра вирішила проблему для мене, хоча не на Ubuntu. У мене був /homeрозділ btrfs'd, який, звичайно, пошкоджений. Система не завантажуватиметься, оскільки вона була включена fstab. Я увійшов у режим технічного обслуговування, перемкнув рядок із цим розділом і завантажився нормально (у мене був запасний розділ ext4, який я міг би використовувати як /home).

Я змонтував розділ вручну за допомогою наступної команди:

mount -t btrfs -o recovery,nospace_cache,nospace_cache /dev/sda3 /mnt/sda3і насправді вдалося зберегти мої дані. Хоча для його монтажу не потрібно було так багато часу. Так ДЯКУЄМО Петро.


3
Ви можете просто опублікувати це як коментар до відповіді Петра, сказавши "Це спрацювало", а потім просто позначте це як справжню відповідь. в іншому випадку Пітер не отримає жодного "справжнього" кредиту (точки відбору)
Thomas Ward

1
mount -t btrfs -o ro,nospace_cache,nospace_cache /dev/sda3 /mnt/sda3

ro = лише для читання

Ця робота для мене


1
Чи читали ви коментар @The Lord of Time до подібного коментаря, який було додано як відповідь? Ось це знову, якщо ви цього не зробили - "Ви можете просто написати це як коментар до відповіді Петра, сказавши" Це спрацювало ", а потім просто позначте це як істинну відповідь. Інакше Петро не отримає жодної" правдивої ". кредит (реп. бали) "
geezanansa

1

У мене була така ж проблема. Після перезавантаження я більше не міг змонтувати мій розділ btrfs. Однак жоден із згаданих тут рішень не міг її вирішити.

Що для мене виправило - оновлення ядра з 3.10 до 3.12. Після перезавантаження розділ btrfs можна було знову встановити.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.