我成功在 ext4 檔案系統上找到一個檔案。例如,檔案「cycling.txt」的開頭4k塊是105441。 ,但是速度很慢。如何直接取得真實位置?我可以將它用於後面的安全擦除操作嗎?非常感謝!
答案1
ext4 使用的區塊號碼 --- 您可以透過使用 debugfs 的「stat」命令或使用「filefrag -v」來找到它們,它們是邏輯 4k 區塊號。也就是說,它們以 4k 為單位,相對於分區的開頭。
如果您使用 fdisk 或 gdisk 等程序,它將為您提供以 512 位元組磁區開頭的分割區。
這是一個例子。假設您要找 /boot/vmlinuz-4.19.0-2-amd64 的位置。 (使用命令“df /boot/vmlinuz-4.19.0-2-amd64”,我們發現 /dev/nvme0n1p4 作為 /boot 檔案系統。)您可以找出其中的邏輯區塊號使用多種方式:
- filefrag -v /boot/vmlinuz-4.19.0-2-amd64
- debugfs -R“範圍 vmlinuz-4.19.0-2-amd64”/dev/nvme0n1p4
- debugfs -R“stat vmlinuz-4.19.0-2-amd64”/dev/nvme0n1p4
使用任何這些機制,我們都會發現該檔案使用區塊號 60416-61680。
要找出它們相對於/dev/nvme0n1p4 開頭的位置,如果需要位元組偏移量,請將這些區塊號碼乘以4096;如果需要以512 位元組磁區為單位,則將這些區塊號碼乘以8 。
如果您想要它們相對於裝置開頭的位置(例如,本例中為 /dev/nvme0n1),您可以透過以下命令找到:
- 貓 /sys/block/nvme0n1/nvme0n1p4/start
或者您可以使用 gdisk 命令並列印出分區表。在這兩種情況下,這都會為您提供分割區「p4」的起始位置(以 512 位元組磁區為單位)。
最後注意:有時人們在談論 Linux 核心使用的 512 扇區號時會說 LBA 號,但您需要小心一點。從儲存設備的角度來看,LBA 代表邏輯塊位址,並且以儲存設備認為的邏輯塊大小為單位。對於歷史上的大多數設備,幾乎所有儲存設備的邏輯區塊設備大小都是 512 位元組。也有例外,例如 IBM 大型主機 DASD,其磁區大小為 2048 位元組,但 512 是有效標準。例如,對於現代儲存設備,有一些“高級格式 HDD”,它們使用 4k 邏輯區塊大小,如果您在 CPU 和 HDD 之間連接 SATA 分析器,您將看到 I/O 請求正在發送4k LBA 數為單位。然而,Linux 核心在區塊裝置層假設所有數字均以 512 位元組磁區為單位,儘管在裝置驅動程式層可能並非如此。我們大多數人的工作台上不會有 SCSI 或 SATA 匯流排分析儀,因此這種差異可能不會太重要,除非您正在偵錯或編寫主機匯流排適配器的裝置驅動程式。因此,在引用 512 位元組磁區時使用術語「LBA」並沒有真正的危害。這是很常見的做法,如果您只從 Linux 核心及其用戶空間實用程式的角度擔心事情,那麼沒有什麼壞處。然而,有些人喜歡對這些事情吹毛求疵,如果你是那種喜歡透過指出人們何時應該使用 KiB 而不是 KB 來相信自己道德高人一等的人,現在你知道另一種方法了吹毛求疵很煩人。 :-)