Apakah ada perintah yang akan menampilkan blok awal dan akhir dari file apa pun?
command-line
filesystems
files
tepat
sumber
sumber
Jawaban:
hdparm
Saya tidak 100% yakin ini yang Anda cari, tetapi saya yakin Anda bisa melakukan ini menggunakan perintah
hdparm
, khususnya dengan--fibmap
saklarnya.kutipan
Contoh
Katakanlah kita memiliki file sampel.
Sekarang saat kita berlari
hdparm
.filefrag
Metode lain yang bagus untuk mengetahui blok awal & akhir file adalah
filefrag
. Anda harus menggunakan sakelar yang sesuai, untuk mendapatkan hasil yang diinginkan. Salah satu kelebihan alat inihdparm
adalah bahwa setiap pengguna dapat menjalankannya, jadi tidaksudo
diperlukan. Anda harus menggunakan-b512
sakelar sehingga output ditampilkan dalam blok 512 byte. Kita juga perlu mengatakanfilefrag
untuk menjadi verbose.Contoh
debugfs
Metode ketiga untuk mendapatkan LBA file adalah dengan memanfaatkan
debugfs
. Metode ini akan membutuhkan sedikit matematika, tetapi saya pikir penting untuk menunjukkan bagaimana seseorang dapat mengkonversi dari nilai luasan yang dilaporkan olehdebugfs
LBA, bagi mereka yang mungkin ingin tahu.Jadi mari kita mulai dengan inode file.
CATATAN: Kita juga bisa menggunakan nama file di dalam
debugfs
tetapi untuk demonstrasi ini saya akan menggunakan inode sebagai gantinya.Sekarang mari kita dapatkan
stat
informasidebugfs
tentang inode kami.Informasi penting ada di bagian luasan. Ini sebenarnya adalah blok filesystem yang digunakan oleh inode ini. Kami hanya perlu mengubahnya menjadi LBA. Kita dapat melakukan ini melalui persamaan berikut.
CATATAN: Dengan asumsi bahwa filesystem kami menggunakan ukuran blok 4k dan perangkat keras yang mendasarinya menggunakan unit 512 byte, kita perlu mengalikan exents dengan 8.
Contoh
Jadi, dalam contoh kita, tingkat awal dan akhir kita sama, karena file kita cocok dalam satu tingkat.
Jadi LBA kami adalah 282439184..282439191.
Referensi
sumber
filefrag
.debugfs
.filefrag
dengan bloksi tersedia 1024 dan 2048 ..debugfs
dengan luas file yang lebih besar : 0 - 12187 .. saya akan mengambil waktu saya dan mengerti .. itu sangat membantu, terima kasih ...Nomor sektor relatif terhadap perangkat blok yang menahan FS (bukan seluruh disk)
(Catatan yang
hdparm --fibmap
relatif terhadap seluruh disk, bukan partisi atau apa pun blockdev lainnya memegang FS. Ini juga membutuhkan root.)filefrag -e
berfungsi dengan baik, dan menggunakan ioctl yang generik dan efisienFIEMAP
, sehingga harus bekerja pada hampir semua sistem file (termasuk BTRFS yang sering-aneh, bahkan untuk file yang dikompresi BTRFS). Ini akan kembali ke FIBMAP untuk sistem file / kernel tanpa dukungan FIEMAP.Khusus XFS
Jika Anda menggunakan xfs, maka
xfs_bmap
memiliki output yang lebih bagus: Ini menunjukkan Anda di mana ada lubang, sementarafilefrag
hanya memiliki tingkat selanjutnya mulai dari sektor selanjutnya. Ia menggunakan blok-blok 512B, bukan apa pun ukuran sebenarnya dari filesystem. (biasanya 4k di Linux). Ini menunjukkan kepada Anda di mana grup alokasi setiap tingkat berada, dan bagaimana ia diluruskan pada batas-batas garis RAID.-l
redundan saat-v
digunakan, tetapi untuk beberapa alasan saya selalu mengetik-vpl
.-pl
output lebih kompak.Keduanya
filefrag
danxfs_bmap
menunjukkan kepada Anda luasan yang telah dialokasikan sebelumnya.hdparm --fibmap
hanya berguna jika Anda ingin nomor sektor relatif ke seluruh hard drive , bukan di dalam partisi filesystem aktif. Itu tidak bekerja di atas RAID perangkat lunak (atau mungkin hal lain antara sistem file dan hard drive). Itu juga membutuhkan root. Terlepas dari nama opsi, ia sebenarnya menggunakanFIEMAP
bila tersedia (ioctl-map tingkat yang lebih baru, bukan ioctl blok-peta lama).sumber
Jadi, untuk file yang diberikan, Anda ingin tahu nomor blok disk mana yang berisi awal dan akhir file itu.
debugfs (8) terlihat menjanjikan untuk ext2 / 3/4 FSes
stat (1), ls -i, lsof (8) memberikan nomor inode, tetapi tidak banyak lagi tentang blok disk.
head / tail --bytes = 1024 berguna untuk konten file, tetapi tidak untuk blok disk.
dd (1) akan menjadi apa yang Anda inginkan untuk memeriksa konten blok - waspadai perbedaan antara parameter seek = dan skip =, dan hindari = / dev / ... kecuali Anda benar - benar ingin file output menjadi perangkat .
sumber
hdparm --fibmap
akan mencantumkan blok yang ditempati file. Perhatikan bahwa mereka mungkin tidak bersebelahan, jadi "mulai dan berakhir" tidak masuk akal.sumber
--fibmap
. Anda juga perlu menentukan nama file dengan itu. Contoh:hdparm --fibmap afile
.hdparm
berada di tingkat drive keseluruhan, tidak pernah menggunakannya untuk file sebelumnya.