linux磁盤之回環設備


為什么要講回環設備,下面看下系統的采樣情況

 

 

上面圖有loop0,loop1等設備標記,這些是什么?
看看下面fdisk -l 的結果,亂糟糟的一堆?

 

 

 
什么是回環設備?  上面的loop0, loop1就是。

回環設備( 'loopback device')允許用戶以一個普通磁盤文件虛擬成一個塊設備。(磁盤文件 --> 塊設備)
創建回環設備即我們所說的創建虛擬塊設備(虛擬塊設備也說仿真塊設備,類似模擬一塊磁盤)。 我們有時候也叫循環設備。

loop設備(回環設備)是一種偽設備(相對真實的塊設備(塊設備包括磁盤等)來說),是使用文件來模擬塊設備的一種技術(例如:把真實的磁盤文件中某一部分文件,模擬成獨立的磁盤使用),文件模擬成塊設備后, 就像一個磁盤或光盤一樣使用(也有單獨的入口,例如:/dev/loop0 這樣,而真實的磁盤塊文件比如/dev/sda)。在使用之前,一個 loop 設備必須要和一個文件進行連接(例如: 用losetup命令來把常規文件或塊設備(/dev/loop0)關聯到一個loop文件,loop文件可以是*.iso或者*.img或目錄等)。
       例如: $losetup /dev/loop0  /var/lib/my/images/my.img
  如果這個文件包含有一個完整的文件系統,那么這個文件就可以像一個磁盤設備一樣被mount 起來(mount到根下的某一個目錄使用)。之所以叫loop設備(回環),其實是從文件系統這一層來考慮的,因為這種被 mount起來的鏡像文件(*.iso或者*.img等)它本身也包含有文件系統,通過loop設備把它mount起來,它就像是文件系統之上再繞了一圈的文件系統,所以稱為 loop。

我們看看下面的磁盤情況

 

我們看到回環設備和塊設備情況了,如果你沒有安裝docker,可能就沒有loop0,loop1這樣的回環設置
可能就是這樣(除非我們明確的在系統中創建了回環設置)

想一下一個磁盤設備,對它的所有讀寫操作都將被重定向到讀寫一個名為 disk-image 的普通文件而非操作實際磁盤或分區的軌道和扇區。

(當然,disk-image 必須存在於一個實際的磁盤上,而這個磁盤必須比虛擬的磁盤容量更大。)

回環設備就是允許你這樣使用一個普通文件。

回環設備以 /dev/loop0、/dev/loop1 等命名。(注意:只有超級用戶才有權限設置回環設備)

回環設備的使用與其它任何塊設備相同。特別是,你可以在這個設備上創建文件系統並像普通的磁盤一樣將它掛載在系統中。這樣的一個將全部內容保存在一個普通文件中的文件系統,被稱為虛擬文件系統(virtual file system)。
實例機器采樣


如果你想建回環設備,首先確認當前系統是否有在使用回環設備
 

/dev/loop0 已經存在,你會得到類似上面面的結果。然后你就需要把 /dev/loop0 替換成 /dev/loop1, 或者再把 /dev/loop1替換成/dev/loop2, 並以此類推,
直到找到一個空的回環設備為止。這時你就可以建/dev/loop2回環設備了.

 

[root@fp-web-130 mnt]#  losetup -f  //查看哪個loop設備是空閑的

 

 

 

 

我們拿docker實踐來說---docker是默認通過devicemapper存儲機制創建回環設備(其他存儲機制還有OverlayFS,AUFS,Btrfs,Device Mapper,VFS,ZFS等)


 

同時看下docker info輸出

[root@fpvm-DBServer61 storage]# docker info
Containers: 9
Running: 0
Paused: 0
Stopped: 9
Images: 61
Server Version: 18.06.1-ce   #docker的版本信息
Storage Driver: devicemapper  ##采用的存儲驅動,這里看到采用的是devicemapper 存儲驅動,docker目前支持的存儲驅動有:OverlayFS,AUFS,Btrfs,Device Mapper,VFS,ZFS。
                         docker提供了上面幾種存儲驅動來實現不同的方式存儲鏡像。有可能會看到一些名字為dm-xx的設備,那么這些設備到底是什么設備呢,跟磁盤有什么關系呢? dm是Device Mapper的縮寫,Device Mapper 是 Linux 2.6 內核中提供的一種從邏輯設備到物理設備的映射框架機制,在該機制下,用戶可以很方便的根據自己的需要制定實現存儲資源的管理策略,當前比較流行的 Linux 下的邏輯卷管理器如 LVM2(Linux Volume Manager 2 version)、EVMS(Enterprise Volume Management System)、dmraid(Device Mapper Raid Tool)等都是基於該機制實現的,關於dm我另外章節會講。插入幾個圖

Pool Name: docker-253:0-1228875-pool
Pool Blocksize: 65.54kB
Base Device Size: 10.74GB
Backing Filesystem: xfs     ##回環設備的文件格式,對Docker 來說,backing filesystem 就是/var/lib/docker/所在的文件系統
Udev Sync Supported: true
Data file: /dev/loop0   #loop0回環設備給了 data
Metadata file: /dev/loop1  #loop1回環設備給了metadata,這里存的是容器鏡像的大小信息,以及該容器鏡像所代表的rootfs等
Data loop file: /mnt/docker/storage/devicemapper/devicemapper/data  ###具體掛載,這個目錄地址默認是/var/lib/docker ,我已經改變默認的到了/mnt/docker/storage/下
Metadata loop file: /mnt/docker/storage/devicemapper/devicemapper/metadata
Data Space Used: 17.28GB
Data Space Total: 107.4GB   
Data Space Available: 20.9GB
Metadata Space Used: 15.67MB
Metadata Space Total: 2.147GB
Metadata Space Available: 2.132GB
Thin Pool Minimum Free Space: 10.74GB
Deferred Removal Enabled: true
Deferred Deletion Enabled: true
Deferred Deleted Device Count: 0
Library Version: 1.02.146-RHEL7 (2018-01-22)
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 468a545b9edcd5932818eb9de8e72413e616e86e
runc version: 69663f0bd4b60df09991c08812a60108003fa340
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-327.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 8
Total Memory: 15.66GiB
Name: fpvm-DBServer61
ID: WJF2:VDH3:GEII:QHMF:RMWB:OTKU:FC2H:BEQC:A7BJ:ANBP:FWWM:HD3M
Docker Root Dir: /mnt/docker/storage
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false

WARNING: devicemapper: usage of loopback devices is strongly discouraged for production use.
Use `--storage-opt dm.thinpooldev` to specify a custom block storage device.
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

 


 device mapper 在構建自己的存儲設備的時候是通過下面這個流程

 

 

       首先會先創建一個空文件 A(Device mapper 驅動默認會創建一個100G的文件包含鏡像和容器。每一個容器被限制在10G大小的卷內,可以自己配置調整,
docker 默認創建的是一個 100G 的空文件), 這個文件有 100G 大,但實際上是一個空文件。
    然后創建一個本地回環設備 loopback0, 這個設備的特點是可以關聯這個空文件 A,並且可以把這個 loopback0 掛載出一個設備 B。
   這樣任何對 B 的改動都會通過 loopback0 保存在這個文件 A 中。
    

創建一個虛擬塊設備例子 

1、檢查下哪個回環設備有空閑

[root@fp-web-130 mnt]# losetup -f

/dev/loop2

2、制作img鏡像
[root@fp-web-130 src]# dd if=/dev/zero of=my.img count=2000

2000+0 records in

2000+0 records out

1024000 bytes (1.0 MB) copied, 0.00305511 s, 335 MB/s
3、查看生成的鏡像

[root@fp-web-130 src]# ll

total 1000

-rw-r--r-- 1 root root 1024000 Feb  9 00:22 my.img
4、格式化鏡像

[root@fp-web-130 src]# mkfs.ext3 my.img

mke2fs 1.42.9 (28-Dec-2013)

my.img is not a block special device.

Proceed anyway? (y,n) y  //這里輸入y ,繼續

Filesystem too small for a journal

Discarding device blocks: done                            

Filesystem label=

OS type: Linux

Block size=1024 (log=0)

Fragment size=1024 (log=0)

Stride=0 blocks, Stripe width=0 blocks

128 inodes, 1000 blocks

50 blocks (5.00%) reserved for the super user

First data block=1

Maximum filesystem blocks=1048576

1 block group

8192 blocks per group, 8192 fragments per group

128 inodes per group

Allocating group tables: done                            

Writing inode tables: done                            

Writing superblocks and filesystem accounting information: done

//查看格式化之后的鏡像

[root@fp-web-130 src]# ll

total 144

-rw-r--r-- 1 root root 1024000 Feb  9 00:23 my.img

開始把img文件模擬成設備
[root@fp-web-130 src]#losetup /dev/loop2 my.img

//查看執行后的結果

 

 

//創建掛載目錄 

[root@fp-web-130 src]# mkdir /mnt/loop2test

//掛載
[root@fp-web-130 src]# mount /dev/loop2 /mnt/loop2test

 

執行卸載
[root@fp-web-130 /]#umount /mnt/loop2test/
//刪除回環設備
[root@fp-web-130 /]#losetup -d loop2

查看結果,loop2已經沒有了

 

 

 

 

                                                               


免責聲明!

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



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