Bayangkan sebuah file dibuat dengan:
truncate -s1T file
echo test >> file
truncate -s2T file
Saya sekarang memiliki file 2 tebibyte (yang menempati 4kiB pada disk), dengan "test\n"
tulisan di tengah.
Bagaimana saya memulihkannya secara "test"
efisien, yaitu tanpa harus membaca seluruh file.
tr -d '\0' < file
Akan memberi saya hasilnya tetapi itu akan memakan waktu berjam-jam.
Yang saya suka adalah sesuatu yang hanya menampilkan bagian file yang tidak jarang (jadi hanya di atas "test\n"
atau lebih mungkin, blok 4kiB dialokasikan pada disk yang menyimpan data itu).
Ada API untuk mengetahui bagian mana dari file yang dialokasikan (FIBMAP, FIEMAP, SEEK_HOLE, SEEK_DATA ...), tetapi alat apa yang memaparkannya?
Solusi portabel (setidaknya untuk OS yang mendukung API tersebut) akan dihargai.
text-processing
sparse-files
Stéphane Chazelas
sumber
sumber
strings
?tr
sejak masih membaca seluruh file dan melakukan lebih dari sekadar menghapus byte NUL.Jawaban:
Yang terbaik yang bisa saya dapatkan sejauh ini adalah (ksh93, menggunakan
filefrag
darie2fsprogs
1.42.9 (beberapa versi yang lebih lama memiliki API yang berbeda), pada sistem file berbasis luas di Linux):filefrag
melaporkan luasan file menggunakan FIEMAP ioctl untuk sistem file yang mendukungnya.Bagian
*unwritten*
mencakup untuk (non-jarang, tetapi masih penuh dengan nol saya tidak tertarik) file yang telahfallocated
tetapi tidak ditulis.Versi terbaru
bsdtar
ataustar
dapat menggunakan beberapa API tersebut untuk menghasilkantar
file yang mengidentifikasi bagian yang jarang. Itu akan membuat solusi yang lebih portabel , tetapi kemudian orang harus mengurai file tar yang dihasilkan untuk mendapatkan bagian yang tidak jarang.sumber