Bagaimana cara memulihkan partisi BTRFS yang tidak akan dipasang?

13

Instalasi untuk 12,04 terus gagal, dan solusinya adalah agar penginstal mengabaikan partisi btrf yang sebelumnya saya gunakan untuk / home.

Sekarang sudah terinstal, saya sudah mencoba untuk me-mount partisi btrfs sehingga saya bisa mengakses file 70GB saya. Itu tidak akan me-mount, dan btrfsck kesalahan dengan tiga baris berikut:

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

Dapatkah seseorang tolong beri tahu saya cara membuat partisi ini berfungsi? Saya telah membaca online bahwa saya mungkin dapat memulihkan data menggunakan btrfs-restore, tetapi saya tidak dapat menemukan program itu di mana pun.

Tony
sumber

Jawaban:

10

Cara termudah

btrfs-zero-log /dev/sda5

Anda mendapatkan masalah itu karena transaksi (tulis atau hapus) macet di jurnal log dan disk tidak cocok dengan itu.

Bagaimana itu bekerja:

Jadi ketika data ditulis pertama, maka ditulis ke jurnal kemudian ke disk (atau pada saat yang sama, tetapi jurnal hanya menyimpan metadata tentang penulisan yang akan datang - tidak yakin ... perlu penelitian lebih lanjut pada bagian itu) ...

Bagaimanapun jika Anda mematikan sistem di tengah-tengah ini menulis / menghapus atau melakukan sesuatu hickup sistem (turun USB yang memegang titik mount btrfs Anda), maka ketika itu mengembalikan bahwa mount tidak akan berfungsi itu akan gagal ( dmesg dan btrfsck akan menunjukkan kesalahan lebih detail) ...

Melihat dmesg Anda akan melihat pesan-pesan transid yang sama.

Anda akan melihat sesuatu seperti ini:

parent transid verify failed on 109973766144 wanted 1823 found 1821

Ini berarti bahwa btrf ingin transif 1826 (Itu ada di jurnal) tetapi pada disk itu melihat 1821. Jadi disk itu 2 transaksi jauh dari yang tidak sinkron dengan jurnal. Saya pribadi akan mengambil risiko brtfs-zero-log di sini hanya karena hanya 2 transaksi. Tetapi untuk menjadi 100% aman jika ini adalah satu-satunya data Anda (ngomong-ngomong jika Anda memiliki data penting Anda harus PERNAH memiliki hanya 1 salinannya, selalu memiliki salinan / cadangan di lokasi lain yang aman - menyalahkan pembuat btrfs tidak akan membenarkan terhadap orang-orang sendiri kurangnya tanggung jawab untuk tidak memiliki cadangan - btrfs bukan solusi cadangan, itu adalah sistem file - tidak ada solusi cadangan yang benar selain memiliki salinannya di tempat lain - bahkan tanpa paritas atau mirrored drive, cadangan sebenarnya adalah duduk di suatu tempat di bawah tanah di Alpen sementara salinan aktifnya ada di kantor Anda di Texas)

parent transid verify failed on 31302336512 wanted 62455 found 62456

Di sini jurnal ingin 62455 tetapi disk adalah satu di depan di 62456, jadi dalam kasus Anda saya hanya akan menghapus jurnal. Jurnal tidak memperbarui kali ini. Sekali lagi saya katakan kepada Anda tentang hal yang aman, jika itu satu-satunya data Anda dan mega kritis (memalukan pada Anda), dan saya akan melakukan operasi di bawah ini terlebih dahulu agar aman.

Menjalankan btrfsck / dev / sda5 (yang omong-omong hanya memeriksa saja sehingga benar-benar aman, satu-satunya opsi btrfsck yang harus Anda khawatirkan) juga akan menunjukkan kepada Anda pesan-pesan itu.

Tetapi berhati-hatilah jika data itu sangat penting, saya akan melakukannya dulu (Seperti yang dikatakan tuan-tuan lainnya)

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

Kemudian cp atau rsync semua file Anda ke lokasi yang aman, lalu ketika aman lakukan btrfs-zero-log, jika ini operasi yang sukses Anda hanya membuang banyak waktu untuk mencadangkan sistem Anda (tetapi jika tidak berhasil, Anda baru saja menyimpan pantat)

Kemudian jika mount gagal melakukan pengembalian btrf (dump sistem, seperti yang saya pahami ini adalah operasi yang dapat dilanjutkan, namun ia terus meminta Y atau y setiap saat dan lagi jadi perhatikan hasilnya)

btrfs restore /dev/sda5 /USB

Kemudian ketika safe (ketika btrfs restore selesai) lakukan btrfs-zero-log, jika itu operasi yang sukses Anda hanya membuang banyak waktu untuk membuat cadangan sistem Anda (tetapi jika tidak berhasil, Anda hanya menyelamatkan pantat Anda)

Anda dapat menjalankan layar terlebih dahulu

screen /bin/bash

btrfs restore /dev/sda5 /USB

CATATAN LAYAR LAYAR

Untuk melepaskan (perintah akan tetap berjalan): CONTROL-a lalu ketik ": lepas" tanpa tanda kutip lalu tekan ENTER

Cara lain untuk melepaskan: Kemudian tutup dempul atau terminal Anda dan itu akan terlepas (perintah / restore masih akan berjalan).

Untuk memeriksanya, cukup saring kembali:

screen -x

layar -x akan melampirkan ke sesi, bahkan jika terlepas, dan tidak seperti -h mengatakan, itu akan melampirkan bahkan jika sudah terpasang juga)

Jika Anda memiliki beberapa layar, layar -x akan memberi tahu Anda harus lebih spesifik untuk melampirkan sesi:

screen -ls

Untuk daftar semua sesi, mudah diingat.

untuk melihat PID Anda juga dapat melakukan ini:

ps aux | grep screen

Setelah Anda mengetahui PID Anda, kemudian jalankan layar seperti ini:

screen -x PID

Itu akan dilampirkan ke sesi tertentu. Anda dapat memiliki beberapa sesi / puttys yang terpasang pada layar yang sama (mereka akan menampilkan teks yang sama, Anda dapat mengetik perintah dalam satu, dan mereka akan dicerminkan pada dempul lainnya)

kossboss
sumber
7

Mount saat boot menggunakan opsi mount root fs:

rootflags=recovery,nospace_cache

atau

rootflags=recovery,nospace_cache,clear_cache

Daftar lengkap opsi pemasangan btrfs harus ada di sini https://btrfs.wiki.kernel.org/index.php/Mount_options dan hal-hal lain mungkin berguna juga, seperti noatime, nodatacow (memperbaiki bug kernel untuk saya beri saya sebuah kesempatan untuk menyalin file saya).

Tambahkan ke grub.cfg / menu.lst Anda, atau ketik di saat boot.

Hal-hal nospace_cache akan membuat semuanya sangat lambat. Cukup boot, tunggu (lama), matikan, dan boot secara normal.

Saya memiliki hal yang sama beberapa hari yang lalu, dan di atas memperbaikinya. Tetapi juga setelah itu, ada beberapa masalah ruang ... ruang yang dilaporkan tidak 100% tetapi masih bisa dikatakan di luar ruang.

==

Saya pikir Anda juga dapat menambahkan opsi yang sama di fstab Anda, misalnya:

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

Jika Anda mencoba memulihkan direktori / home yang dipasang di partisi dengan UUID=0237alksfadg-lhdfkj3624-4fdfjb-9dsfe2d-dfddaf.

Peter
sumber
Mengapa dua nospace_cache?
CVn
itu salah ketik, seharusnya clear_cache
Peter
:) Anda baru saja disimpan dengan cadangan!
derflocki
1

Jawaban Peter memecahkan masalah bagi saya, meskipun tidak di Ubuntu. Saya punya /homepartisi btrfs'd yang tentu saja rusak. Sistem tidak mau boot karena sudah hidup fstab. Saya memasuki mode pemeliharaan, memotong garis dengan partisi itu, dan boot secara normal (saya punya partisi ext4 cadangan yang bisa saya gunakan sebagai /home).

Saya memasang partisi secara manual dengan perintah berikut:

mount -t btrfs -o recovery,nospace_cache,nospace_cache /dev/sda3 /mnt/sda3dan sebenarnya bisa menyimpan data saya. Meski tidak butuh waktu lama untuk memasangnya. Jadi TERIMA KASIH Peter.

Nikos
sumber
3
Anda mungkin ingin mempostingnya sebagai komentar pada jawaban peter, mengatakan 'Ini berhasil' dan kemudian tandai itu sebagai jawaban yang benar. jika tidak, Peter tidak akan mendapatkan kredit "benar" (poin rep)
Thomas Ward
1
mount -t btrfs -o ro,nospace_cache,nospace_cache /dev/sda3 /mnt/sda3

ro = baca saja

Ini bekerja untuk saya

Dan
sumber
1
Apakah Anda membaca komentar The Lord of Time terhadap komentar serupa yang ditambahkan sebagai jawaban? Ini dia lagi jika Anda tidak - "Anda mungkin ingin mempostingnya sebagai komentar pada jawaban peter, mengatakan 'Ini berhasil' dan kemudian tandai itu sebagai jawaban yang benar. Jika tidak, Peter tidak akan mendapatkan" benar " kredit (poin rep) "
geezanansa
1

Saya memiliki masalah yang sama. Setelah reboot saya tidak lagi bisa me-mount partisi btrfs saya. Namun tidak ada solusi yang disebutkan di sini yang bisa menyelesaikannya.

Apa yang diperbaiki untuk saya adalah memutakhirkan kernel dari 3.10 ke 3.12. Setelah reboot partisi btrfs bisa dipasang lagi.

Fabian Jakobs
sumber