写在前面
一台服务器使用docker容器长时间运行会产生很多文件(不完全是日志或文件垃圾,运行数据永远是增量的)导致磁盘写满,最终导致容器不可用。
不考虑增加硬盘缓解问题,可以参考 清理docker磁盘占用。
下面我要介绍的是给liunx系统增加磁盘并增加docker的磁盘使用空间。
一、思路
- 给
liunx系统挂一块盘,并且初始化分区 - 设置
liunx系统将此分区挂载到文件夹,并且开机自动挂载 - 移动
/var/lib/docker到新的分区(这里也可以考虑docker数据盘模式)
二、在liunx上挂载磁盘并初始化分区
注意:以下是分区操作的详细步骤,对每一步操作进行了截图和说明。
-
执行
fdisk -l,查看新增数据盘
- 这里显示了
2块磁盘,一块是40G,一块是200G Disk表示磁盘,Device表示挂载信息。(我这里是2块磁盘都挂载好了)磁盘没有挂载的时候只会显示对应的Disk,不会显示对应的Device
-
执行
fdisk /dev/vdb,对磁盘进行分区(我这里忘记截图了,拿其他教程的相同步骤替代)
- 输入
n,按Enter键,开始新建分区
- 磁盘有两种分区类型
p表示主分区e表示扩展分区- 磁盘使用
MBR分区形式,最多可以创建4个主分区,或者3个主分区加1个扩展分区,扩展分区不可以直接使用,需要划分成若干个逻辑分区才可以使用。磁盘使用GPT分区形式时,没有主分区、扩展分区以及逻辑分区之分
- 磁盘有两种分区类型
- 输入
p,按Enter键,开始创建一个主分区
Partition number表示主分区编号,可以选择1-4。
- 输入
主分区编号1,按Enter键
First sector表示起始磁柱值,可以选择2048-209715199,默认为2048
- 使用默认
起始磁柱值2048即可,直接按Enter键
Last sector表示截止磁柱值,可以选择2048-209715199,默认为209715199;这里可以通过减小这个截止磁柱值来设置一部分的磁盘空间作为一个分区,但起始磁柱值必须小于分区的截止磁柱值
- 使用默认
截止磁柱值209715199即可,直接按Enter键。 
- 输入
p,按Enter键,查看新建分区的详细信息
- 请记下这个
Device Boot值,非常关键,后面都要用的
- 请记下这个
- 输入
w,按Enter键,将分区结果写入分区表中
- 如果之前进行了误操作,在这里输入
q可以退出fdisk分区工具,之前的分区结果也不会被保留
- 如果之前进行了误操作,在这里输入
到这里分区完成 , 但是现在通过df -TH命令还看不到这个分区
三、设置将此分区挂载到文件夹,并且开机自动挂载
- 执行
partprobe,将新的分区表变更同步至操作系统 - 执行
mkfs -t ext4 /dev/vdb1,将新建分区文件系统设为系统所需格式
- 我该用什么文件系统:查看当前磁盘的分区
cat /etc/fstab,可以看到有个UUID的信息,磁盘是ext4,这是当前正在使用的主磁盘,保持一致即可。 - 我忘了分区在哪里:就是上面记下的
Device Boot信息。万一没记,执行fdisk -l,可以看到多个Disk,下面没有Device的就是你要操作的磁盘。后面的数字就是你之前输入的主分区编号,不出意外应该是/dev/vdb1
- 我该用什么文件系统:查看当前磁盘的分区
- 执行
mkdir /mnt/sdc,新建挂载目录- 如果应为磁盘空间满了新建不了,请删除一些日志文件(比如/var/log文件夹)再重启服务器后再来执行新建挂载目录
- 这个
/mnt目录最好固定,后面的sdc可以自己更换其他名字,建议不要用中文或者特殊符号,不然出现奇怪问题自己整哈
- 执行
mount /dev/vdb1 /mnt/sdc,将新建分区挂载到新建的目录下 - 执行
df -TH,查看挂载结果 
到这里已经可以看到挂载的磁盘了,并且可以正常使用,但是每次开机都要手动执行mount /dev/vdb1 /mnt/sdc,下面开始设置自动挂载
- 执行
blkid /dev/vdb1,查询磁盘分区的UUID 
- 执行
echo "UUID=beacc427-80f0-4503-a845-26efbe67f98d /mnt/sdc ext4 defaults 0 2" >> /etc/fstab- 第一列:就是上一步的
UUID值 - 第二列:是挂载的文件夹
- 第三列:是文件系统格式
- 第四列:是磁盘分区的挂载选项,此处通常设置为
defaults即可 - 第五列:为
Linux dump备份选项。- 值
0表示不使用Linux dump备份。现在通常不使用dump备份。 - 值
1表示使用Linux dump备份。
- 值
- 第六列:为
fsck选项,即开机时是否使用fsck检查磁盘。- 值
0表示不检验。 - 挂载点为
/根目录的分区,此处必须填写1。根分区设置为1,其他分区只能从2开始,系统会按照数字从小到大依次检查下去
- 值
- 第一列:就是上一步的
- 验证自动挂载是否成功
- 执行
umount /dev/vdb1,卸载已挂载的分区 - 执行
mount -a,将/etc/fstab文件所有内容重新加载 - 执行
mount | grep /mnt/sdc,查询文件系统挂载信息 
- 执行
到这里已经完成了自动挂载分区,接下来把这个分区分配给docker使用
四、将docker搬迁到新的分区中
我这里使用的是docker文件搬迁,即将原来系统盘中的docker搬迁到新的大磁盘上,对docker现有容器无影响。另外一种使用docker数据盘模式也是可行的,但是我没有实际试过。
- 开始搬迁
docker文件 - 执行
systemctl stop docker,停止docker服务 - 执行
mv /var/lib/docker /mnt/sdc,移动docker文件到新的挂载文件夹 - 执行
ln -s /mnt/sdc/docker/ /var/lib/,创建软链指向新的docker目录 (如果执行不了ln -s改为ln -sf) - 向
/etc/docker/daemon.json文件中增加属性"data-root":"/mnt/sdc/docker" - 执行
systemctl start docker,启动docker服务
到这里就全部完成了

评论区