Ubuntu上利用Chef实现磁盘的自动分区、自动挂载

Ubuntu 系统上利用Chef实现磁盘的自动分区、自动挂载

背景

服务器托管在公司的私有云上,因为空间太小,所以每台服务器创建之后,需要动态申请磁盘。但是对于Linux的机器,申请完磁盘,Attach到虚拟机,之后需要重启,磁盘才可见。而且,新的磁盘是没有分区的,所以需要:

  1. 分区(分1个区)
  2. 格式化(用ext4格式)
  3. 挂载

以上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

详细说明:

  1. 先检查,是不是磁盘已经分过区了,利用ls /dev/sdb1命令。
  2. 假如没有,那么执行sfdisk /dev/sdb < partition.config来分区,partition.config是一个sfdisk能够理解的配置文件,他的格式很简单:
    • 格式:起始,大小,ID。
    • 起始 = 起始柱面(如果不进行指定则为第一可用柱面)
    • 大小 = 柱面数量(如果不进行指定则指所有柱面)
    • ID号 = 分区类型(L: Linux, S: Swap, E:扩展分区)
    • 比如: ,600,L;
    • 我用的是“,,L”表示将整个磁盘分成一个区,类型是Linux主分区
  3. 分完区之后,用mkfs命令将其格式化成ext4格式。
  4. 最后,就是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

你可能感兴趣的:(Ubuntu,Chef)