創建loop設備


問題, 如果在文件系統之上再創一個文件系統?

例如在ext3的文件系統上創建一個xfs的文件系統,可以通過回環設備loop, 我們經常通過 mount -o loop 來 mount一個iso文件
但mount 的選項總是ro的

mount: /mnt: WARNING: device write-protected, mounted read-only.

不僅如此, 先在當前文件系統dd出一個文件, 再綁定到loop設備上,然后mount 到某個目錄后, 可以進行讀寫訪問

[root@ha1 ~]# dd if=/dev/urandom of=file bs=1M count=2
2+0 records in
2+0 records out
2097152 bytes (2.1 MB, 2.0 MiB) copied, 0.0164121 s, 128 MB/s

[root@ha1 ~]# mkfs.ext3  file 
mke2fs 1.44.6 (5-Mar-2019)
Discarding device blocks: done                            
Creating filesystem with 2048 1k blocks and 256 inodes

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (1024 blocks): done
Writing superblocks and filesystem accounting information: done

[root@ha1 ~]# mount -o loop file  /mnt
[root@ha1 ~]# ls /mnt/
lost+found

[root@ha1 mnt]# echo abc > abc
[root@ha1 mnt]# ls
abc  lost+found

綁定loop設備和掛載是由mount 一個命令完成的。

手動綁定loop

[root@ha1 ~]# losetup -f
/dev/loop1

[root@ha1 ~]# losetup -f file 

這樣只是將文件綁定了loop設備,需要再掛載到文件目錄mount /dev/loop0 /mnt

[root@ha1 ~]# ls /mnt/
abc  lost+found
[root@ha1 ~]# 

losetup -f 可以返回第一個未被使用的loop設備名

創建loop設備

有的系統默認創建了 loop0 .. loop7 的塊設備,有的則是在需要的時候創建,比如mount iso的時候發現沒有loop設備,則會創建

  1. 手動創建loop設備通過 mknode 創建
mknode  /dev/loop0 b 7 0
mknode  /dev/loop1 b 7 0
...

mknode /dev/loop7 b 7 0
  1. 如果8個loop0 .. loop8 設備都占用了, 可以再創建loop8
$sudo mknod /dev/loop8 b 7 8 

$ls -l /dev/loop8
brw-r--r-- 1 root root 7, 8 Jun 11 19:16 /dev/loop8

ps: loop 是塊設備


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM