DOCKER 从入门到放弃(五)

添加docker启动参数修改存储大小

添加--storage-opt 参数设置thin-pool和元数据大小
--storage-opt dm.loopmetadatasize=10G --storage-opt dm.loopdatasize=400G 修改thin-pool池大小为400g,元数据大小为10g

[root@docker opt]# cat /etc/sysconfig/docker|grep -v "^#"

OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false --graph=/opt/docker --storage-opt dm.loopmetadatasize=10G    --storage-opt dm.loopdatasize=400G'
if [ -z "${DOCKER_CERT_PATH}" ]; then
    DOCKER_CERT_PATH=/etc/docker
fi

--storage-opt dm.loopmetadatasize=10G    --storage-opt dm.loopdatasize=400G

也可以修改/usr/lib/systemd/system/docker.service 文件,但是要使用systemctl daemon-reload重载配置文件

重启docker,不建议使用systemctl restart docker 命令,存在不会卸载环回设备直接启动docker,导致存储大小无法修改

[root@docker opt]# systemctl stop docker
[root@docker opt]# systemctl start docker

查看修改后的存储容量

[root@docker opt]# docker info|grep -i data
 WARNING: Usage of loopback devices is strongly discouraged for production use. Use `--storage-opt dm.thinpooldev` to specify a custom block storage device.
 Data file: /dev/loop0
 Metadata file: /dev/loop1
 Data Space Used: 907.9 MB
 Data Space Total: 429.5 GB
 Data Space Available: 14.89 GB
 Metadata Space Used: 3.92 MB
 Metadata Space Total: 10.74 GB
 Metadata Space Available: 10.73 GB
 Data loop file: /opt/docker/devicemapper/devicemapper/data
 Metadata loop file: /opt/docker/devicemapper/devicemapper/metadata
 

使用truncat 命令扩大环回设备文件大小

先找到存储的环回设备文件路径

[root@docker opt]# docker info|grep "loop file"
 
 Data loop file: /opt/docker/devicemapper/devicemapper/data
 Metadata loop file: /opt/docker/devicemapper/devicemapper/metadata

使用truncate 命令扩大空间

[root@docker opt]# truncate -s 800g /opt/docker/devicemapper/devicemapper/data     #扩大thin-pool到800g
[root@docker opt]# truncate -s 20g /opt/docker/devicemapper/devicemapper/metadata    #扩大元数据到20g

重启docker,不建议使用systemctl restart docker 命令,存在不会卸载环回设备直接启动docker,导致存储大小无法修改

[root@docker opt]# systemctl stop docker
[root@docker opt]# systemctl start docker

在重新挂载环回设备后,环回设备容量变化后docker 会自动更新devicemap的映射表,也可以在重启前手动完成更新操作,如下:

此方法无法修改metadata space的大小

查看环回设备在内存中的大小信息为1000g

[root@docker devicemapper]# echo $[ $(sudo blockdev --getsize64 /dev/loop0) / 1024 / 1024 / 1024 ]
1000

使用使用truncate 命令扩大空间

[root@docker devicemapper]# truncate -s 2000g data 
[root@docker devicemapper]# ll -h
total 175M
-rw------- 1 root root 2.0T Oct 10 01:13 data
-rw------- 1 root root 100G Oct 10 00:52 metadata

查看在内存中的信息仍然为1000g

[root@docker devicemapper]# echo $[ $(sudo blockdev --getsize64 /dev/loop0) / 1024 / 1024 / 1024 ]
1000

重新加载环回设备在内存中的信息

[root@docker devicemapper]# losetup -c /dev/loop0
[root@docker devicemapper]# echo $[ $(sudo blockdev --getsize64 /dev/loop0) / 1024 / 1024 / 1024 ]
2000

查看docker的存储thin-pool池的名称

[root@docker devicemapper]# dmsetup status | grep ' thin-pool ' | awk -F ': ' {'print $1'}
docker-253:0-34124585-pool

查看devicemap的映射表中docker存储thin-pool池信息

[root@docker devicemapper]# dmsetup table docker-253:0-34124585-pool
0 2097152000 thin-pool 7:1 7:0 128 32768 1 skip_block_zeroing 

更新映射表中的信息,先挂起thin-pool池,在修改表中信息,在退出挂起状态

[root@docker devicemapper]# dmsetup suspend  docker-253:0-34124585-pool
[root@docker devicemapper]# dmsetup reload docker-253:0-34124585-pool --table '0 4194304000 thin-pool 7:1 7:0 128 32768 1 skip_block_zeroing'  #4194304000 是扇区大小值,对应为2T,这儿只修改了逻辑卷组对应到物理磁盘的扇区大小
[root@docker devicemapper]#  dmsetup resume docker-253:0-34124585-pool

参考资料

http://www.cnblogs.com/hustcat/p/3908985.html
https://www.ibm.com/developerworks/cn/linux/l-devmapper/index.html#resources
https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/#increase-capacity-on-a-running-device

原文地址:https://www.cnblogs.com/panjunbai/p/7645662.html