Dengan begitu banyak bagian berbeda yang membentuk tumpukan penyimpanan biasa, adalah keajaiban bahwa semuanya berfungsi sama sekali. Namun, hal-hal bekerja dengan baik sebagian besar waktu. Beberapa kali ketika terjadi kesalahan, kami membutuhkan utilitas seperti xfs_repair untuk mengeluarkan kami dari kekacauan.
Ada yang bisa salah saat Anda menulis file dan listrik padam atau ada kernel panic. Bahkan data yang tidak aktif pada disk dapat membusuk seiring waktu karena struktur fisik elemen memori dapat berubah, ini dikenal sebagai bit rot. Dalam semua kasus, kita memerlukan mekanisme untuk:
- Memeriksa data yang sedang dibaca adalah data yang sama dengan yang terakhir ditulis. Ini diimplementasikan dengan memiliki checksum untuk setiap blok data dan membandingkan checksum untuk blok itu ketika data sedang dibaca. Jika checksum cocok, data belum diubah
- Cara untuk merekonstruksi data yang rusak atau hilang, baik dari blok cermin atau dari blok paritas.
Pengaturan kotak pasir Sand
Mari siapkan testbench untuk menjalankan rutinitas perbaikan xfs alih-alih menggunakan disk aktual dengan data berharga di dalamnya. Jika Anda sudah memiliki sistem file yang rusak, Anda dapat melewati bagian ini dan langsung menuju ke yang berikutnya. Testbench ini terdiri dari VM Ubuntu yang terhubung dengan disk virtual yang menyediakan penyimpanan mentah. Anda dapat menggunakan VirtualBox untuk membuat VM dan kemudian membuat disk tambahan untuk dilampirkan ke VM.
Cukup buka pengaturan VM Anda dan di bawah Pengaturan → Penyimpanan bagian Anda dapat menambahkan disk baru ke pengontrol SATA Anda dapat membuat disk baru. Seperti yang ditunjukkan di bawah ini, tetapi pastikan VM Anda dimatikan saat Anda melakukan ini.
Setelah disk baru dibuat, nyalakan VM dan buka terminal. Perintah lsblk daftar semua perangkat blok yang tersedia.
$ lsblksda 8:0 0 60G 0 disk
sda1 8:1 0 1M 0 bagian
sda2 8:2 0 60G 0 bagian /
sdb 8:16 0 100G 0 disk
sr0 11:0 1 1024M 0 rom
Terlepas dari perangkat blok utama sda, di mana OS diinstal, sekarang ada perangkat sdb baru. Mari kita cepat membuat partisi darinya dan memformatnya dengan sistem file XFS.
Buka utilitas parted sebagai pengguna root:
$ parted -a optimal /dev/sdbMari kita buat tabel partisi terlebih dahulu menggunakan mklabel, ini diikuti dengan membuat satu partisi dari seluruh disk (berukuran 107GB). Anda dapat memverifikasi bahwa partisi dibuat dengan mendaftarkannya menggunakan perintah print:
(berpisah) mklabel gpt(berpisah) mkpart primer 0 107
(berpisah) cetak
(berpisah) berhenti
Oke, sekarang kita bisa melihat menggunakan lsblk bahwa ada perangkat blok baru di bawah perangkat sdb, yang disebut sdb1.
Mari format penyimpanan ini sebagai xfs dan pasang di direktori /mnt. Sekali lagi, lakukan tindakan berikut sebagai root:
$mkfs.xfs /dev/sdb1$ mount /dev/sdb1 /mnt
$df -h
Perintah terakhir akan mencetak semua sistem file yang terpasang dan Anda dapat memeriksa apakah /dev/sdb1 sudah terpasang di /mnt.
Selanjutnya kita menulis banyak file sebagai data dummy untuk defragment di sini:
$ dd if=/dev/urandom of=/mnt/myfile.jumlah txt=1024 bs=1024Perintah di atas akan menulis file myfile.txt berukuran 1MB. Jika mau, Anda dapat secara otomatis menghasilkan lebih banyak file seperti itu, menyebarkannya ke berbagai direktori di dalam sistem file xfs (dipasang di /mnt) dan kemudian memeriksa fragmentasi. Gunakan bash atau python atau bahasa skrip favorit Anda lainnya untuk ini.
Memeriksa dan Memperbaiki Kesalahan
Kerusakan data dapat secara diam-diam menyusup ke dalam disk Anda tanpa sepengetahuan Anda. Jika blok data tidak dibaca dan checksum tidak dibandingkan maka kesalahan mungkin muncul pada waktu yang salah. Saat seseorang mencoba mengakses data, secara real time. Sebagai gantinya, adalah ide yang baik untuk menjalankan pemindaian menyeluruh dari semua blok data untuk memeriksa pembusukan bit atau kesalahan lainnya secara berkala.
Utilitas xfs_scrub seharusnya melakukan tugas ini untuk Anda. Terinspirasi sebagian oleh perintah scrub OpenZFS, fitur eksperimental ini hanya tersedia di xfsprogs versi 4.15.1-1ubuntu1 yang bukan rilis stabil. Jika salah mendeteksi kesalahan, itu mungkin menyesatkan Anda untuk menyebabkan kerusakan data alih-alih memperbaikinya! Namun, jika Anda ingin bereksperimen dengannya, Anda dapat menggunakannya pada sistem file yang di-mount menggunakan perintah:
$xfs_scrub /dev/sdb1Sebelum mencoba memperbaiki sistem file yang rusak, pertama-tama Anda harus meng-unmount-nya. Ini untuk menghentikan aplikasi agar tidak secara tidak sengaja menulis ke sistem file ketika seharusnya dibiarkan sendiri.
$ umount /dev/sdb1Memperbaiki kesalahan semudah menjalankan:
$xfs_repair /dev/sdb1Metadata penting selalu disimpan sebagai banyak salinan, bahkan jika Anda tidak menggunakan RAID dan jika ada yang tidak beres dengan superblok atau inode maka perintah ini dapat memperbaiki masalah itu untuk Anda.
Langkah selanjutnya
Jika Anda sering melihat kerusakan data (atau bahkan sekali, jika Anda menjalankan misi penting) pertimbangkan untuk mengganti disk Anda karena ini mungkin merupakan indikator awal disk yang akan mati.
Jika pengontrol gagal, atau kartu RAID tidak dapat digunakan lagi, maka tidak ada perangkat lunak di dunia yang dapat memperbaiki sistem file untuk Anda. Anda tidak menginginkan tagihan pemulihan data yang mahal dan Anda juga tidak menginginkan waktu henti yang lama, jadi awasi SSD dan piringan pemintalan tersebut!