Filesystems
性能測試出錯,dd 命令在 /dev/mapper/device 上創建了 13TB 的數據。為什麼系統沒有崩潰?硬碟-250GB
所以我想在我的嵌入式設備上用加密和正常的數據儲存做一些性能測試。
這根本不是我期望看到的!
你能向我解釋一下剛剛發生的事情嗎?為什麼
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
查詢掛載的文件系統。對於給定的文件系統,欄位Size
等Used
是文件系統知道和報告的關於自身的內容。可能有關文件系統的一些數據、元數據和資訊仍然可以作為記憶體中的舊值使用,所以看起來足夠理智;但顯然必須從設備中讀取一些新內容。您寫的垃圾的某些部分已被讀取,因此令人驚訝的值標題中的陳述是錯誤的。
dd
“命令創建了 13TB 的數據”是不正確的。13T
出現只是因為df
從以前的文件系統中獲得了一些隨機值。