Clonezilla-自动化二次开发

再生龙可以通过修改开机参数来实现自动化,可以让再生龙开机后自动执行设定的动作。

开机参数(boot parameters)介绍

开机参数是被Linux系统用来改变一些系统的行为,可以是开启或者关闭某些特别的功能。
不同的开机载入程序使用不同的开机参数:

  1. 在MBR的机器上,使用Clonezilla live从光盘开机,isolinux是此时的开机加载程序,所以设定档在于Clonezilla live的这个档案/syslinux/isolinux.cfg
  2. 在MBR的机器上,使用Clonezilla live从USB随身碟开机,syslinux是此时的开机加载程序,所以设定档在于Clonezilla live的这个档案/syslinux/syslinux.cfg
  3. 在MBR的机器上,使用Clonezilla live从PXE开机,pxelinux是此时的开机加载程序,设定档在于PXE服务器上,以DRBL当作PXE服务器为例,在/tftpboot/nbi_img/pxelinux.cfg/default,也可能在其他地方,端看管理者的在PXE服务器上的设定。
  4. 在UEFI的机器上,使用Clonezilla live从光盘或者随身碟开机,grub2是此时的开机加载程序,所以设定档在于Clonezilla live的这个档案/boot/grub/grub.cfg
  5. 在UEFI的机器上,使用Clonezilla live从UEFI网络开机,grub2是此时的开机加载程序,设定档在于uEFI网络开机服务器上,以DRBL当作uEFI网络开机服务器为例,在/tftpboot/nbi_img/grub/grub.cfg,也可能在其他地方,端看管理者的在UEFI网络开机服务器上的设定。

Linux开机后,上面设置的开机参数会出现在/proc/cmdline.
再生龙是基于Debian以及Clonezilla组合而成。所以有两种开机参数:

  1. Debian 的live-boot和live-config参数
  2. 再生龙的开机参数,这些参数名称格式为"ocs_*",例如ocs_live_run,ocs_live_extra_param, ocs_live_batch等。
    1. ocs_live_run是Clonezilla live开机后执行的主程序名称,可以是任何指令。常见的是:“ocs-live-general”,“ocs-live-restore”或者任何你输入的指令。

例如:

ocs_live_run=“ocs-live-general”

//注意//你可能会需要在你的script中使用“sudo”指令,或者你可以类似这样指定:ocs_live_run=“sudo bash /my-clonezilla”(只限英文环境才能有空白,中文环境因为要进jfbterm无法吃到空白后的参数)

  1. ocs_live_extra_param参数只有在ocs_live_run=“ocs-live-restore”(不是ocs-live-general或者其他指令)时,这个参数会被传给ocs-sr。因此,这个参数事实上是将参数喂给ocs-sr。

例如:

ocs_live_extra_param=“--batch -c restoredisk sarge-r5 sda”
  1. keyboard-layouts参数可预先设定键盘对应(细节请参考live-config)

例如:

keyboard-layouts=NONE (使用美式键盘)
keyboard-layouts=us(使用美式键盘)
keyboard-layouts=fr(使用法国键盘)
  1. locales参数可指定预设语系(细节请参考live-config)

例如:

locales=zh_CN.UTF-8(使用简体中文)
  1. 通过[URI(Uniform Resource Identifier)](https://en.wikipedia.org/wiki/Uniform_Resource_Identifier)来指定镜像源库,可用“ocs_repository”:

Clonezilla live所支持的URI:
[dev|smb|smb1|smb1.0|smb2|smb2.0|smb2.1|smb3|smb3.0|smb3.11|smb3.1.1|ssh|nfs|nfs4|http|https|ram]:[//[user:password@]host[:port]][/]path
有五种方式可以通过“ocs_repository”来指定镜像源库:

  - local device:dev:///dev/partition,dev:///LABEL|UUID|PARTLABEL|PARTUUID=uuid|label

LABEL,UUID是来自档案系统,而PARTLABEL或者PARTUUID是来自GPT分割表中的的分割区.

  - nfs server: nfs|nfs4://host/path
  - samba server: smb://[domain;user:password@]host/path
  - 指定samba_server的版本:(smb1|smb1.0|smb2|smb2.0|smb2.1|smb3|smb3.0|smb3.11|smb3.1.1)://[domain;user:password@]host/path
  - ssh server: ssh://[user@]host[:port]/path(URI在ssh这部份无法指定密码)
  - webdav server: http|https://host[:port]/path(URI在webdav这部份无法指定使用者名称与密)

举例而言:

ocs_repository=“dev:///dev/sdf1“
ocs_repository=“dev:///LABEL=my-img-repo“
ocs_repository=“nfs://192.168.100.254/home/partimag/“
ocs_repository=“nfs4://192.168.100.254/partimag/”
ocs_repository=“smb://administrator:[email protected]/images/“
ocs_repository=“smb://my_domain;jack:[email protected]:445/images/“
ocs_repository=“ssh://[email protected]/home/partimag/“
ocs_repository=“http://192.168.100.180/share“

用了上述的开机参数,再生龙开机后,会自动挂载经ocs_repository指定的镜像源库。当有需要密码的时候,会提示你输入。
//NOTE//

  - 若使用网络磁碟机当作镜像源库,记得“ocs_prerun”来“dhclient”或者“ip”这个参数来设定网络。
  - 你也可以用“ocs_prerun”来跑对应的指令来挂载镜像源库,若你要自己指定更多挂载的参数使用ocs_prerun会比较灵活。
  1. 要从http(s),ftp,tftp,与本机的URL来抓tarall/zip/sh格式的镜像然后开放在Clonezilla live开机后的/opt/目录下,可以用“ocs_preload*”,例如:
    1. 第1类,抓取tarball/zip/shell script档案:
ocs_preload=[http|https|ftp|tftp|file]://[HOST_NAME_or_IP_ADD]/path/to/your_tarball_or_script

支持的扩展名有:tar.gz,tgz,tar.bz2,tbz2,tar.xz,txz,zip,.sh

     2. 第2类,使用cifs/nfs网络磁盘目录上的镜像,使用挂载的方式:
ocs_preload=“mount -t cifs //YOUR_CIFS_SERVER/path/to/ /path/to/mounting_point”
ocs_preload=“mount -t nfs YOUR_CIFS_SERVER:/path/to/ /path/to/mounting_point”

支持的网络磁碟机有:cifs(网络芳邻/samba)与nfs 2/3/4
例如,使用如下的开机参数:

ocs_preload=tftp://192.168.100.254/my-custom.tgz
ocs_preload=http://192.168.200.254/my-custom.tar.xz
ocs_preload=file:///lib/live/mount/medium/my-custom.tar.bz2
ocs_preload=tftp://192.168.100.254/my-custom.sh
ocs_preload=“mount -t cifs //192.168.120.2/images/ /tmp/cifs -o user=administrator,password=yourpasswd”
ocs_preload=“mount -t nfs 192.168.120.254:/home/partimag/script/ /tmp/nfs -o ro”

多重的ocs_preload*参数是可以的,只要在最后面加上数字即,例如:

ocs_prealod=…ocs_preload1=…ocs_preload2=

如此,当Clonezilla live开机的时候,这些ocs_preload指定的镜像会自动被下载/复制并且解开后放到/opt/下。它的镜像模式也会自动被设定,亦即设成755的格式以便可以执行。
此外,若/opt/{overwrite-all-boot-param,overwrite-part-boot-param}这两镜像存在(从ocs_preload下载来的),它可以用来盖掉某些开机参数。镜像“overwrite-all-boot-param”是用来盖掉全部的/proc/cmdline,而“overwrite-part-boot-param”仅会盖掉/proc/cmdline下的部份开机参数。特别来说,也就是那些“ocs_*”参数。这功能特别有用在于你要二次开发的时候,然而有些时候你不容易或者不能改开机参数的设定档(如isolinux.cfg,因为它在光盘上,是只读的)。
举例而言,“overwrite-all-boot-param”的档案内容可以类似这样:

boot=live union=overlay username=user config components quiet noswap edd=on nomodeset nodmraid locales=en_US.UTF-8 keyboard-layouts=us ocs_live_run=“ocs-sr -x -um beginner --batch -p reboot -scs -scr -sfsck -senc”ocs_live_extra_param=“”ocs_live_batch=no vga=788 ip= net.ifnames=0 nosplash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=1.

而“overwrite-part-boot-param”的内容可以类似这样:

locales=ja_JP.UTF-8 keyboard-layouts=fr ocs_live_run=“ocs-sr -x -scr -scs”ocs_live_batch=“no”

//注意//

  - 若使用网络磁碟机当作镜像源库,记得“ocs_prerun”来“dhclient”或者“ip”这个参数来设定网络。
  - 你也可以用“ocs_prerun”来跑对应的指令来挂载镜像源库,若你要自己指定更多挂载的参数使用ocs_prerun会比较灵活。
  1. 在KMS模式中指定字体名称与大小,可以使用“ocs_fontface”与“ocs_fontsize”:

例如:

ocs_fontface=“TerminusBold”
ocs_fontsize=“24x12”

可以参考Debian或者Ubuntu系统上的/etc/default/console-setup以及console-setup(5)的手册。

  1. ocs_debug(或者ocs-debug)是用来在执行Clonezilla live相关指令之前,进入命令列,以便除错。
  2. ocs_daemonon,ocs_daemonoff,ocs_numlk,ocs_capslk.

前两个参数是用来启动或者关闭某个服务,例如ocs_daemonon=“ssh”,那ssh服务就会在开机的时候被自动启动。后两个参数是开启或关闭number lock与caps lock的键。例如:ocs_numlk=on来自动开启number lock键。

  1. ocs_prerun,ocs_prerun1,ocs_prerun2…等参数让你可以在Clonezilla主程序被执行前,执行相关指令,例如ocs_prerun=“/live/image/myscript.sh”。如果你有更多指令要执行,依照顺序:ocs_prerun=…,ocs_prerun1=…,ocs_prerun2=….超过10个参数的话,记得ocs_prerun01,ocs_prerun02…,ocs_prerun11来按照顺序执行。
  2. ocs_savedisk_prerun,ocs_saveparts_prerun,ocs_restoredisk_prerun,and ocs_restoreparts_prerun:这四个开机参数是用来在Clonezilla live分别跑savedisk,saveparts,restoredisk,与restoreparts之前执行一些指令。例如:ocs_restoredisk_prerun=“echo running ocs_restoredisk_prerun”就是在Clonezilla live跑“restoredisk”这个动作之前,先跑这个指令“echo running ocs_restoredisk_prerun”。
  3. ocs_savedisk_postrun,ocs_saveparts_postrun,ocs_restoredisk_postrun,and ocs_restoreparts_postrun:这四个开机参数是用来在Clonezilla live分别跑savedisk,saveparts,restoredisk,与restoreparts之后执行一些指令。例如:ocs_restoredisk_postrun=“echo running ocs_restoredisk_postrun”就是在Clonezilla live跑“restoredisk”之后,执行这个指令:“echo running ocs_restoredisk_postrun”。
  4. ocs_overwrite_postaction 这个开机参数有比较高的执行顺序,可以盖过ocs-sr的“-p”参数以及ocs-onthefly的“-pa”参数所指定的动作。ocs_overwrite_postaction可以指定的参数包含:[choose|reboot|poweroff]-on-[restoredisk|restoreparts|savedisk|saveparts|clone]举例而言,choose-on-restoredisk也就是Clonezilla live将restoredisk这动作执行完后,总是会让使用者选择后续的动作,不管ocs-sr的“-p”参数以及ocs-onthefly的“-pa”参数所指定的动作为何。
  5. echo_ocs_prerun与echo_ocs_postrun:这参数是用来是否要在屏幕上显示ocs_prerun与ocs_postrun的指令,预设这两个参数指定的指令在执行前会被显示。但是若你因为某个原因,例如安全考察不显示机敏数据的话,可以“no”来隐藏那个ocs_prerun或者ocs_postrun指定的指令不在屏幕上显示。

例如:

echo_ocs_prerun=“no”
  1. ocs_live_run_tty是用来指定执行 o c s l i v e r u n 的终端机( t t y )。预设 ocs_live_run的终端机(tty)。预设 ocsliverun的终端机(tty)。预设ocs_live_run是只在/dev/tty1执行(也就是第一个终端机)。如果你要用序列终端机ttyS0,可以加上live-getty与console=ttyS0,38400n81。

//注意//

  - 如果`live-getty console=ttyS0,38400n81`被指定在开机参数里,ocs_live_run_tty会尊重ttyS0,即使其他的值被指定到ocs_live_run_tty也会被略去。
  - 使用此值时,建议同时指定locales与keyboard-layouts。
  1. ip,这个参数是让你来指定网络的设定值。在Clonezilla live里面,使用一个修改过的live-initramfs版本,所以你同时可以指定DNS服务器。它的格式是:ip=ethernet port,IP address,netmask,gateway,DNS。例如你要指定网卡eth0的IP位址是10.0.100.1,netmask是255.255.255.0,gateway是10.0.100.254,DNS服务器是8.8.8.8,你可以这样指定:
ip=eth0:10.0.100.1:255.255.255.0:10.0.100.254:8.8.8.8

如果有两张以上的网卡,使用“,”来区隔它们,例:

ip=eth0:10.0.100.1:255.255.255.0:10.0.100.254:8.8.8.8,eth1:192.168.120.1:255.255.255.0:192.168.120.254::
  1. 此外,“live-netdev”(是的,不是ocs_live_netdev)可以被用来指定PXE开机时候的网卡,以便抓取档案系统档filesystem.squashfs。这主要是针对两张或者两张以上的网卡才会有此需求。例如live-netdev=“eth1”可以让你强迫live-initramfs使用eth1的网卡来抓档案系统档filesystem.squashfs。
  2. nicif:网络开机时,透过指定网卡的MAC address来抓取filesystem.squashfs。例如nicif=00:aa:bb:cc:dd:ee可以指定强迫在Clonezilla live开机的时候,透过MAC address是00:aa:bb:cc:dd:ee的网卡来抓取filesystem.squashfs。
  3. ocs_netlink_timeout:这个参数让你来指定侦测网卡连通时,最长侦测时间的设定(秒),预设是30秒。举例而言,若你觉得30秒太久了,可以用以下的方式来指定最长只侦测5秒:
ocs_netlink_timeout=5

实现自动化备份Ubuntu

背景

由于公司内系统版本更新的比较勤快,搞自动化备份会有效的提高工作效率。

了解再生龙开机参数

首先我们要知道再生龙提供给我们了一些接口用于自动化处理一些流程,上面也做了介绍,比如我们要跳过设置语言的步骤,通过设置开机参数locales=zh_CN.UTF-8就可以实现。
我们先看下初始状态下的开机参数吧,/boot/grub/grub.cfg如下所示:

menuentry "Clonezilla live (VGA 800x600)" --id live-default {
  search --set -f /live/vmlinuz
  $linux_cmd /live/vmlinuz boot=live union=overlay username=user config components quiet loglevel=0 noswap edd=on nomodeset enforcing=0 locales= keyboard-layouts= ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_batch="no" vga=788 ip= net.ifnames=0  nosplash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=1
  $initrd_cmd /live/initrd.img
}

其对应的就是如图所示的第一个选项,当我们选择这个选项的时候,执行的就是大括号里面的命令:

实现自动化备份开机参数

在初始启动参数里面找到locales并且设置为zh_CN.UTF-8,这就跳过了语言设置。keyboard-layouts设置为NONE或者us,跳过键盘设置界面。
这时候就已经跳过了两个步骤,那如何将系统盘自动挂载呢,这时候就需要另一个参数ocs_prerun了,通过设置下面两个参数即可自动化挂载硬盘:

ocs_prerun="mount /dev/sdb1 /mnt" # 先把硬盘mount到本地
ocs_prerun1="mount --bind -o noatime /mnt/WBOX-5762 /home/partimag" # 再mount文件夹到/home/partimag

接下来的步骤也就是系统备份了,不难发现我们在配置完系统备份的所有选项后会跳出一行绿色字体的代码,这个就是系统备份的代码,如下图所示:

PS. 下次您可以直接使用这样的指令:
/usr/sbin/ocs-sr -q2 -c -j2 -z9p -i 4096 sfsck -scs -senc -p choose savedisk 2023-05-29-06-img sda
该指令会被存储到:/tmp/ocs-2023-05-29-06-img-2023-05-29-06-11

有了这行代码后如何让他自动化执行呢,其实再生龙提供了一个参数,如下面命令所示:

ocs_live_run="/usr/sbin/ocs-sr -q2 -c -j2 -z9p -i 4096 sfsck -scs -senc -p choose savedisk 2023-05-29-06-img sda"

当然,使用上面的命令就能实现自动化备份了,但是期间还是会有一步需要手动确认,如何自动跳过呢?
ocs_live_run这个参数也是可以接受运行脚本的,我们只要把脚本编写好,很多功能都能实现。

# **********************************************************"
# * Author        : maochk
# * Email         : [email protected]
# * Create time   : 2023-05-17
# * Filename      : clonezilla-backup.sh
# * Description   : 再生龙自动化备份脚本
# **********************************************************

echo "auto run backup scripts"
echo y | /usr/sbin/ocs-sr -q2 -c -j2 -z9p -i 4096 sfsck -scs -senc -p choose savedisk 2023-05-29-06-img sda

这时候的ocs_live_run参数应该这样配置:

ocs_live_run="sudo bash /home/partimag/auto-backup.sh"

这时候就可以实现完整的自动化备份了~~~
整体的开机参数如下所示:

menuentry "YCZX DEPLOY LIVE" --id live-default {
  search --set -f /live/vmlinuz
  $linux_cmd /live/vmlinuz boot=live union=overlay username=user hostname=kinetic config quiet loglevel=0 noswap edd=on nomodeset enforcing=0 locales=zh_CN.UTF-8 keyboard-layouts=NONE ocs_prerun="mount /dev/sdb1 /mnt" ocs_prerun1="mount --bind -o noatime /mnt/WBOX-5762 /home/partimag" ocs_live_run="sudo bash /home/partimag/auto-deploy.sh" ocs_live_extra_param="" ocs_live_batch="no" vga=788 ip= net.ifnames=0  splash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=1
  $initrd_cmd /live/initrd.img
}

以该启动参数启动后的界面如下所示:

BACKUP LIVE 以及DEPLOY LIVE,这两个分别是自动化备份选项以及自动化部署选项,当再生龙系统启动后过5秒自动进入自动化部署选项,后续27个步骤都为自动化实现。

自动化前后对比

在实现自动化后对其进行了时间测试,发现自动化后可以将镜像还原、备份时间缩短1~2分钟,除了需要手动选择BIOS自动项,其余只要插上U盘和系统盘就能自动完成工作了。

时间对比表格

场景 自动化前 自动化后 结论
标准镜像制作(备份) 10分10秒 8分54秒 已经熟练使用再生龙的情况下,实现自动化后大概节约了1分钟时间,除了BIOS修改需要人员介入,其余都为自动化完成,部署完成后自动关机
标准镜像部署(还原) 12分53秒 11分50秒

Reference:

  1. https://clonezilla.nchc.org.tw/clonezilla-live/doc/fine-print.php?path=99_Misc/00_live-boot-parameters.doc#00_live-boot-parameters.doc
  2. https://clonezilla.nchc.org.tw/clonezilla-live/doc/fine-print.php?fullmode=0&withmenu=1&path=./05_Preseed_options_to_do_job_after_booting/01-preseed-options.doc#01-preseed-options.doc
  3. https://clonezilla.nchc.org.tw/clonezilla-live/doc/

你可能感兴趣的:(▶Clonezilla,自动化,linux,运维)