Mount

如何創建作為合法塊設備傳遞的原始(無文件系統)環回設備?

  • October 20, 2021

問題

如何創建和掛載作為合法未格式化磁碟傳遞的假塊設備(使用大文件/磁碟映像)?

背景故事

我正在嘗試在我的愛好 kubernetes 集群中使用 ceph(分佈式儲存系統)設置rook Ceph 需要一個未格式化的塊設備,它將按照它認為合適的方式進行分區和儲存。

我沒有可用的備用磁碟,所以我想: 我為什麼不創建一個環回設備並使用它呢?

由於我的主機作業系統磁碟有足夠的可用空間,我應該能夠在那裡創建一個大文件並將其作為環回設備掛載。

這有兩個問題(據我了解):

  1. 環回設備必須使用某種文件系統格式化才能掛載,這不適用於 Ceph,因為 Ceph需要未格式化的塊設備
  2. 環回設備似乎不算作塊設備。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 
...

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