Mount
如何創建作為合法塊設備傳遞的原始(無文件系統)環回設備?
問題
如何創建和掛載作為合法未格式化磁碟傳遞的假塊設備(使用大文件/磁碟映像)?
背景故事
我正在嘗試在我的愛好 kubernetes 集群中使用 ceph(分佈式儲存系統)設置rook 。Ceph 需要一個未格式化的塊設備,它將按照它認為合適的方式進行分區和儲存。
我沒有可用的備用磁碟,所以我想: 我為什麼不創建一個環回設備並使用它呢?
由於我的主機作業系統磁碟有足夠的可用空間,我應該能夠在那裡創建一個大文件並將其作為環回設備掛載。
這有兩個問題(據我了解):
- 環回設備必須使用某種文件系統格式化才能掛載,這不適用於 Ceph,因為 Ceph需要未格式化的塊設備
- 環回設備似乎不算作塊設備。Ceph 文件用於
lsblk -f
測試設備是否符合 Ceph 條件。該設備必須顯示在輸出中並且沒有任何文件系統格式化。
losetup
會為你做這件事。如果您有一個未使用的循環設備 /dev/loop0:# Make the file head -c 10240 /dev/zero > /tmp/zeroes # Use it as a block device sudo losetup /dev/loop0 /tmp/zeroes # Remove the device sudo losetup -d /dev/loop0
環回設備必須使用某種文件系統進行格式化才能掛載
如果要掛載每個塊設備,則必須對其進行格式化。實際上,您正在安裝文件系統而不是塊設備本身,因此這實際上沒有任何意義。您只需要一個文件,然後使用它
losetup -f disk.img
來創建一個循環設備,僅此而已。循環設備是塊設備,在輸出中可見,lsblk
因此 Ceph 應該能夠使用它。$ dd if=/dev/zero of=disk.img bs=1M count=100 $ sudo losetup -f disk.img $ lsblk -f NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINT loop0 ...
如果無法使用循環設備,您可以使用targetcli創建一個更有說服力的文件支持塊設備,它看起來像一個普通的 SCSI 驅動器。
# targetcli /backstores/fileio/ create test disk.img # targetcli /loopback create Created target naa.50014050efbb30e0. # targetcli /loopback/naa.50014050efbb30e0/luns create /backstores/fileio/test
它創建了一個新的(假)磁碟,該磁碟由我為上面的循環設備創建的相同文件支持:
# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 100M 0 loop ... sdb 8:16 0 100M 0 disk ...