Dd

RAID mdadm 虛擬磁碟太小

  • July 21, 2015
sudo mdadm --build /dev/md0 --level=linear --raid-devices=3 /dev/loop0 /dev/sda1 /dev/sda2

執行上述命令後,/dev/md0小於/dev/loop0++ /dev/sda1/dev/sda2為什麼會發生這種情況,我怎樣才能使它的尺寸正確/dev/sda1/dev/sda2Windows 7 分區需要的一個非常小的分區,以便 Windows 正常啟動。/dev/loop0是我使用此命令創建的環回設備:sudo losetup /dev/loop0 boot.mbr. boot.mbr 是一個映像文件,它是/dev/sda第一個分區開始之前出現在磁碟開頭的前 2048 個扇區的副本,/dev/sda1. 這些扇區包含 Grub 引導載入程序。這是我為創建該圖像文件而執行的命令:dd if=/dev/zero of=boot.mbr count=2048. 它需要相同大小的原因是我正在嘗試設置/dev/md0虛擬硬碟來模仿 Grub 引導載入程序和這 2 個分區的佈局,但是在嘗試設置最後一個分區時我用完了字節,因為/dev/md0磁碟上沒有足夠的字節。如果您需要更多上下文,這裡是我的另一個問題的連結,它解釋了我這樣做的原因:https ://superuser.com/questions/931645/with-linux-mint-as-main-os-dual-boot- windows-7-and-have-a-windows-7-virtual-mac/937491#937491

技術規格

  • Linux Mint 17.2 64 位與 Cinnamon
  • mdadm - v3.2.5
  • dd (coreutils) 8.21

更多詳情

fdisk 顯示/dev/sda1為 1572864000 字節。它顯示/dev/sda2為 229318000128 字節。我的文件系統顯示 boot.mbr 為 1048576。因此,如果將這三個數字相加,/dev/md0驅動器應至少為 230891912704 字節。但 fdisk 顯示 /dev/md0 為 230891847680 字節。所以/dev/md0不知何故比它需要的要小 65024 字節。

推測:

我想也許問題出在環回設備/dev/loop0上。但fdisk -l /dev/loop0顯示設備具有 1048576 字節,因此它與圖像文件的大小匹配。但是, fdisk 抱怨/dev/loop0沒有任何圓柱體。這可能是問題所在嗎?我只是在這裡抓住稻草。

如果/dev/md0是由軟體 RAID 創建的虛擬硬碟,這究竟意味著什麼?一方面,它的數據儲存在哪裡?也許我在某個地方的記憶體或儲存空間不足?

通常,Linux mdadmRAID 設備總是比組件設備的大小(或者在 RAID 0 的情況下它們的總和)小一點,因為 MD 設備儲存元數據。

在這種情況下,您使用--build了 ,它呼叫了不使用元數據的手動組裝模式。然而,線性陣列可能小於組件設備大小的總和,因為 MD 設備使用塊大小。請注意您應該從命令中獲得的以下輸出或類似輸出:

mdadm: chunk size defaults to 64K
mdadm: array /dev/md0 started.

這意味著該數組適用於 65536 字節的塊。例如,如果它是一個 RAID0 陣列(它不是),那麼數據將在一個組件上以 65536 字節交錯,在下一個組件上以 65536 字節交錯,依此類推。

如果末尾有額外的字節不構成完整的塊,則數組無法使用它們。

線上性模式下,我不確定 MD 是否會將每個組件的大小四捨五入到最接近的 65536 字節的倍數,或者只四捨五入整個數組的大小。無論哪種方式,如果您的一個組件的大小不是 65536 字節的倍數(另外兩個是),則會導致 65024 字節的四捨五入——這正是您看到的差異。

顯示塊設備的確切大小的最佳方法是:

blockdev --getsize64 /dev/sda1

因此,如果您計算以下各項的總和:

blockdev --getsize64 /dev/sda1
blockdev --getsize64 /dev/sda2
blockdev --getsize64 /dev/loop0

結果數組的可用大小可以通過以下方式看到:

blockdev --getsize64 /dev/md0

順便說一句,我認為您在這裡嘗試建構的數組非常奇怪並且可能很危險。由兩個物理塊設備和一個由文件支持的虛擬塊設備組成的陣列的用處很奇怪。更重要的是,你說:

/dev/sda1/dev/sda2Windows 7 分區需要的一個非常小的分區,以便 Windows 正常啟動。

聽起來你肯定會破壞 Windows 7,但如果你用 Linux MD RAID 設備覆蓋這些分區,那麼 Windows 就不能再使用它了!

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