coreos 增加新硬盘并更改docker存储位置

刚入手的coreos机器的第一件事就是更改docker image存储位置,以免image下的越来越多将系统盘撑爆。 所以需要新增加一块数据盘,专门用来存储docker image数据。

  • 格式化新硬盘
fdisk -l 确认新硬盘是否挂到机器上面,同时看一下新硬盘名称  
假设 /dev/vdb是新硬盘.

   运行 fdisk /dev/vdb:对数据盘进行分区。
   输入 n 并按回车键:创建一个新分区。
   输入 p 并按回车键:选择主分区。因为创建的是一个单分区数据盘,所以只需要创建主分区。
   说明:如果要创建 4 个以上的分区,您应该创建至少一个扩展分区,即选择 e。
输入分区编号并按回车键。因为这里仅创建一个分区,可以输入 1。
输入第一个可用的扇区编号:按回车键采用默认值 1。
输入最后一个扇区编号:因为这里仅创建一个分区,所以按回车键采用默认值。
输入 wq 并按回车键,开始分区。
[root@iXXXXXXX ~]# fdisk /dev/vdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel  
Building a new DOS disklabel with disk identifier 0x5f46a8a2.  
Changes will remain in memory only, until you decide to write them.  
After that, of course, the previous content won't be recoverable.  
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)  
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to  
  switch off the mode (command 'c') and change display units to
  sectors (command 'u').
Command (m for help): n  
Command action  
e   extended  
p   primary partition (1-4)  
p  
Partition number (1-4): 1  
First cylinder (1-41610, default 1): 1  
Last cylinder, +cylinders or +size{K,M,G} (1-41610, default 41610):  
Using default value 41610  
Command (m for help): wq  
The partition table has been altered!  
Calling ioctl() to re-read partition table.  
Syncing disks.  
  • 确认分区成功
fdisk -l 如果出现:  
Device Boot      Start         End      Blocks   Id  System  
/dev/vdb1               1       41610    20971408+  83  Linux
表示成功
  • 创建文件系统
mkfs.ext4 /dev/vdb1  
  • 挂载文件系统
mkdir /hdd1  
mount /dev/vdb1 /hdd1  
  • 编辑挂载服务

因为coreos推荐使用systemd来管理系统,所以按照官方的建议,编写挂载服务来完成启动时挂载。

hdd1.mount  
[Unit]
Description=Mount hdd1  
Before=docker.service  
[Mount]
What=/dev/vdb1  
Where=/hdd1  
Type=ext4  
Options=discard,errors=remount-ro  
[Install]
WantedBy=multi-user.target  
  • 更改docker 存储目录

docker默认的存储目录在/var/lib/docker,所以我们编写var-lib-docker.mount这个挂载服务(按照coreos的规则,服务名必须和路径相一致)

[Unit]
Description=bind docker folder  
Before=docker.service  
After=hdd1.mount  
[Mount]
What=/hdd1/docker  
Where=/var/lib/docker  
Type=none  
Options=bind  
[Install]
WantedBy=multi-user.target  
  • 重启&验证
systemctl enable hdd1.mount  
systemctl enable var-lib-docker.mount  
systemctl restart docker 

docker run -it --rm hello-world  

如果看到helloworld镜像输出,并且/hdd1/docker出现docker metadata目录则说明修改成功