Filesystems

性能測試出錯,dd 命令在 /dev/mapper/device 上創建了 13TB 的數據。為什麼系統沒有崩潰?硬碟-250GB

  • November 8, 2022

所以我想在我的嵌入式設備上用加密和正常的數據儲存做一些性能測試。

這根本不是我期望看到的!

你能向我解釋一下剛剛發生的事情嗎?為什麼dd命令輸出是 1843200+0 記錄但df -h顯示文件系統磁碟空間使用量為13TB

也許我會解釋我做了什麼。這是我的工作流程:

dd if=/dev/urandom of=enc_per_test.img bs=512 count=2097152

dd if=/dev/urandom of=normal_per_test.img bs=512 count=2097152

並收到 2 張 1GB 的圖片 - 正如我所預測的那樣。

losetup /dev/loop1 enc_per_test.img 

losetup /dev/loop2 normal_per_test.img

之後我執行:

dmsetup -v create enc_per_test --table "0 $(blockdev --getsz /dev/loop1) crypt <crypt_setup> 0 /dev/loop1 0 1 sector_size:512"

mkfs.ext4 /dev/mapper/enc_per_test

mkdir /mnt/enc_per_test

mount -t ext4 /dev/mapper/enc_per_test /mnt/enc_per_test/

正如我所料df-h,顯示掛載的 enc_per_test:

Filesystem ############## Size ### Used ## Avail ## Use% ### Mounted on #####           

/dev/mapper/enc_per_test ## 976M ## 2.6M ## 907M ## 1% #### /mnt/enc_per_test

我清除記憶體:

echo 3 > /proc/sys/vm/drop_caches

最後執行 dd 命令來填充 enc_per_test:

time dd if=/tmp/random of=/dev/mapper/enc_per_test conv=fsync

1843200+0 records in
1843200+0 records out
943718400 bytes (944 MB, 900 MiB) copied, 152.098 s, 6.2 MB/s

所以我想,好吧,沒關係。這就是我想要的。讓我們看看它在 df -h 中的樣子:

Filesystem ############## Size ### Used ## Avail ## Use% ### Mounted on #####           

/dev/mapper/enc_per_test ## 13T ## 13T ## 0 ## 100% #### /mnt/enc_per_test

這裡發生了什麼?為什麼要df -h顯示13TB的數據儲存。這甚至是不可能的,因為我的設備有大約 250GB 的硬碟驅動器。

感謝您的任何回答和提示!

您將/dev/mapper/enc_per_test(設備)中存在的文件系統安裝到/mnt/enc_per_test/(安裝點)。

然後,dd您選擇寫入設備,而不是文件系統內的正常文件(即在掛載點下,例如of=/mnt/enc_per_test/blob)。dd用掛載文件系統時的內容覆蓋了大部分文件/tmp/random系統。

df查詢掛載的文件系統。對於給定的文件系統,欄位SizeUsed是文件系統知道和報告的關於自身的內容。可能有關文件系統的一些數據、元數據和資訊仍然可以作為記憶體中的舊值使用,所以看起來足夠理智;但顯然必須從設備中讀取一些新內容。您寫的垃圾的某些部分已被讀取,因此令人驚訝的值

標題中的陳述是錯誤的。dd“命令創建了 13TB 的數據”是不正確的。13T出現只是因為df從以前的文件系統中獲得了一些隨機

引用自:https://unix.stackexchange.com/questions/724171