Ubuntu 系统上利用Chef实现磁盘的自动分区、自动挂载
背景
服务器托管在公司的私有云上,因为空间太小,所以每台服务器创建之后,需要动态申请磁盘。但是对于Linux的机器,申请完磁盘,Attach到虚拟机,之后需要重启,磁盘才可见。而且,新的磁盘是没有分区的,所以需要:
- 分区(分1个区)
- 格式化(用ext4格式)
- 挂载
以上3步需要在目标虚拟机上运行,所以只能由Chef部署。
Chef 脚本
#
# Cookbook Name:: acadci_workarounds
#
DEVICE = "/dev/sdb"
PARTITION = "/dev/sdb1"
mount_point = node[:acadci_workarounds][:mount_point] # /mnt/new_volume
bash "partition" do
not_if "ls #{PARTITION}"
code <<-EOH
echo ,,L | sfdisk #{DEVICE}
mkfs -t ext4 #{PARTITION}
EOH
end
directory mount_point do
mode "777"
recursive true
end
mount mount_point do
device PARTITION
fstype "ext4"
action :mount
end
详细说明:
- 先检查,是不是磁盘已经分过区了,利用
ls /dev/sdb1
命令。 - 假如没有,那么执行
sfdisk /dev/sdb < partition.config
来分区,partition.config是一个sfdisk能够理解的配置文件,他的格式很简单:
- 格式:起始,大小,ID。
- 起始 = 起始柱面(如果不进行指定则为第一可用柱面)
- 大小 = 柱面数量(如果不进行指定则指所有柱面)
- ID号 = 分区类型(L: Linux, S: Swap, E:扩展分区)
- 比如: ,600,L;
- 我用的是“,,L”表示将整个磁盘分成一个区,类型是Linux主分区
- 分完区之后,用mkfs命令将其格式化成ext4格式。
- 最后,就是mount,Chef提供了现成的resource来mount,所以很简单,设置一下设备/device、挂载点/mount_point,就行了
参考
- Linux sfdisk 用法: http://www.tsingpost.com/articles/201403/487.html
- Ubuntu Linux 永久挂载(mount)分区: http://www.linuxidc.com/Linux/2014-04/100488.htm