Btrfs menawarkan perintah ini untuk memverifikasi integritas data / checksum:
btrfs scrub start <path>|<device>
btrfs check --check-data-csum
Namun, AFAIK yang selalu memverifikasi seluruh sistem file; yang path
argumen adalah untuk mengidentifikasi filesystem di perangkat, tidak mengajukan / direktori di dalam filesystem.
Sekarang, saya memiliki sistem file 3TB Btrfs. Menggosoknya membutuhkan waktu berjam-jam. Terkadang saya perlu memastikan bahwa hanya file / direktori tertentu yang belum terpengaruh oleh bitrot - misalnya, sebelum menggunakan gambar instalasi * .iso atau mengembalikan cadangan. Bagaimana cara menggunakan Btrfs untuk ini - tanpa kembali ke menyimpan file hash manual per setiap file?
Saya sadar bahwa Btrfs tidak menyimpan checksum untuk file individual - ia menyimpan checksum untuk blok data . Dalam hal ini yang saya cari adalah perintah / alat yang mengidentifikasi semua blok yang digunakan untuk menyimpan file / direktori tertentu dan memverifikasi hanya blok-blok itu.
Saya membaca di suatu tempat bahwa Btrfs diduga memverifikasi checksum saat dibaca . Artinya, jika file telah sedikit-busuk, membacanya akan gagal atau semacamnya. Apakah ini masalahnya?
sumber
Jawaban:
Jawabannya adalah: cukup coba baca seluruh file . Jika terbaca berbeda dari apa yang telah checksum, akan ada kesalahan Input / output . Jadi ya, Btrfs memang memverifikasi checksum saat dibaca!
Untuk mengetahui jawaban ini, saya mengumpulkan tes berikut:
token1
);sed
gantitoken1
dengantoken2
;Ini skripnya:
Seperti yang diharapkan, mengganti
mkfs.btrfs
dengan membuat sistem file non-checksumming (misalnyamkfs.ext4
) memungkinkan untuk file yang rusak untuk dibaca. Tentu saja, sha256 nya berbeda dari yang tidak rusak.sumber