Linux备份系统镜像并对镜像中LVM分区文件的修改
来源:互联网 发布:ipad pdf编辑软件 编辑:程序博客网 时间:2024/06/14 03:42
Linux系统下对系统镜像的简单备份所用的命令就是dd命令了。
但是对备份的系统文件可能并不适合新的硬盘。
比如如下的应用环境:
1、目前在一个母板的SSD上已经安装好了一个Linux系统,并在Linux系统上部署好了具体的应用;
2、将母板上的SSD硬盘镜像备份出来,一则为了保护当前的Linux系统,防止系统损坏或丢失后的重复部署;
二则可以将此份备份的镜像文件写入到另外的SSD硬盘中,克隆另外一份系统,以实现快速部署;
3、需要考虑的问题,就是母版中的网络配置。
Linux在自动加载设备硬件时,使用的是udev来协助管理系统中各设备名称。
而克隆后的文件系统,在加载到新的主板上后,系统启动时则会出现网络接口名称错乱的问题。
这个问题就是udev服务在加载时,首先加载已经存在的网络接口的的配置文件
(/etc/udev/rules.d/70-persistent-net.rules),对不对应的接口再进行设备序号的添加,
最终导致克隆后的硬盘启动后网络接口是从1或2开始排序,而不是从eth0开始。
对于这种问题,可以有两种解决方法:
第一、直接修改母板中的70-persistent-net.rules、ifcfg-eth0/ifcfg-eth1配置文件,然后备份出所需的镜像,最后再修改回去;
第二、首先备份出母板中的镜像,然后对镜像进行修改,修改成通用的
(即:注释掉所有的70-persistent-net.rules、ifcfg-eth0/ifcfg-eth1网络接口文件)。
为了不改变母板中的系统,我采用了第二种方法,具体的操作步骤及命令如下:
### 将母板中的系统镜像备份到移动硬盘中 ###
[root@localhost ~]# fdisk -lDisk /dev/sda: 31.7 GB, 31675383808 bytes255 heads, 63 sectors/track, 3850 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x56af7af6 Device Boot Start End Blocks Id System/dev/sda1 * 1 64 512000 83 LinuxPartition 1 does not end on cylinder boundary./dev/sda2 64 3851 30419968 8e Linux LVMDisk /dev/mapper/VolGroup-lv_root: 28.0 GB, 27980201984 bytes255 heads, 63 sectors/track, 3401 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x00000000Disk /dev/mapper/VolGroup-lv_swap: 3166 MB, 3166699520 bytes255 heads, 63 sectors/track, 384 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x00000000[root@localhost ~]# dd if=/dev/sda of=/media/Box-20161202.img
### 卸载移动硬盘,并将移动硬盘上的母板镜像复制到其他的Linux系统中 ###
这里用的系统是ubuntu,为了方便直接通过sudo -i命令切换到了root用户
login as: leekwenleekwen@192.168.1.180's password:Welcome to Ubuntu 12.04.4 LTS (GNU/Linux 3.11.0-15-generic i686) * Documentation: https://help.ubuntu.com/New release '14.04.1 LTS' available.Run 'do-release-upgrade' to upgrade to it.Last login: Fri Dec 2 16:49:02 2016 from thinkpadx64.lanleekwen@leekwen:~$ sudo -i[sudo] password for leekwen:root@leekwen:~# fdisk -l /dev/sdbDisk /dev/sdb: 1000.2 GB, 1000204886016 bytes255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x00055e54 Device Boot Start End Blocks Id System/dev/sdb1 2048 629147647 314572800 83 Linux/dev/sdb2 629147648 1258293247 314572800 83 Linux/dev/sdb3 1258293248 1953525167 347615960 b W95 FAT32root@leekwen:~# mount /dev/sdb2 /mnt/root@leekwen:~# ls /mnt/binary/ profile-tail1.txt rpmforge.listroot@leekwen:~# ls /mnt/binary/Box-20161202.img -l-rw-r--r--. 1 root root 31675383808 Dec 2 16:42 /mnt/binary/Box-20161202.imgroot@leekwen:~# cp /mnt/binary/Box-20161202.img .root@leekwen:~# fdisk -l Box-20161202.imgDisk Box-20161202.img: 31.7 GB, 31675383808 bytes255 heads, 63 sectors/track, 3850 cylinders, total 61865984 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x56af7af6 Device Boot Start End Blocks Id SystemBox-20161202.img1 * 2048 1026047 512000 83 LinuxBox-20161202.img2 1026048 61865983 30419968 8e Linux LVM
看到这行:
Device Boot Start End Blocks Id System
Box-20161202.img1 * 2048 1026047 512000 83 Linux
发现linux的文件系统是从第2048块开始的,所以挂载的时候应该从这个地方开始挂载,
由这条信息可以得出,扇区大小为512
Units = sectors of 1 * 512 = 512 bytes
所以我们需要从512*2048=1048576出开始挂载
root@leekwen:~# echo $((512*2048))1048576root@leekwen:~# mount -o loop,offset=1048576 Box-20161202.img /mntroot@leekwen:~# cd /mnt/root@leekwen:/mnt# lsconfig-2.6.32-431.el6.i686 initramfs-2.6.32-431.el6.i686.img initrd-3.10.28kdump.img System.map vmlinuzefi initramfs-3.10.28.img lost+found System.map-2.6.32-431.el6.i686 vmlinuz-2.6.32-431.el6.i686grub initrd-2.6.32-431.el6.i686kdump.img symvers-2.6.32-431.el6.i686.gz System.map-3.10.28 vmlinuz-3.10.28root@leekwen:/mnt# ls -ltotal 54082-rw-r--r--. 1 root root 109953 Nov 22 2013 config-2.6.32-431.el6.i686drwxr-xr-x. 3 root root 1024 Nov 24 11:41 efidrwxr-xr-x. 2 root root 1024 Dec 2 16:13 grub-rw-------. 1 root root 16260076 Nov 24 11:52 initramfs-2.6.32-431.el6.i686.img-rw-------. 1 root root 17004428 Nov 25 12:26 initramfs-3.10.28.img-rw-------. 1 root root 4730164 Nov 24 14:51 initrd-2.6.32-431.el6.i686kdump.img-rw-------. 1 root root 4884466 Nov 25 11:06 initrd-3.10.28kdump.imgdrwx------. 2 root root 12288 Nov 24 11:23 lost+found-rw-r--r--. 1 root root 190104 Nov 22 2013 symvers-2.6.32-431.el6.i686.gzlrwxrwxrwx. 1 root root 24 Nov 25 11:03 System.map -> /boot/System.map-3.10.28-rw-r--r--. 1 root root 1982877 Nov 22 2013 System.map-2.6.32-431.el6.i686-rw-r--r--. 1 root root 2075204 Nov 25 11:03 System.map-3.10.28lrwxrwxrwx. 1 root root 21 Nov 25 11:03 vmlinuz -> /boot/vmlinuz-3.10.28-rwxr-xr-x. 1 root root 4002656 Nov 22 2013 vmlinuz-2.6.32-431.el6.i686-rw-r--r--. 1 root root 4106432 Nov 25 11:03 vmlinuz-3.10.28
已经挂载成功,并看到系统盘中的数据,这个ID为83直接是系统的镜像,挂载相对不复杂。
而系统镜像Box-20161202.img2的格式却是LVM格式,这个系统的挂载就需要借助于工具了。
root@leekwen:~# echo $((512*1026048))525336576root@leekwen:~# losetup /dev/loop0 Box-20161202.img -o 525336576无pvscan命令,需要安装lvm2工具进行挂载:root@leekwen:~# pvscanThe program 'pvscan' is currently not installed. You can install it by typing:apt-get install lvm2root@leekwen:~# apt-get install lvm2上面是安装lvm2工具root@leekwen:~# pvscan PV /dev/loop0 VG VolGroup lvm2 [29.01 GiB / 0 free] Total: 1 [29.01 GiB] / in use: 1 [29.01 GiB] / in no VG: 0 [0 ]root@leekwen:~# vgchange -ay 2 logical volume(s) in volume group "VolGroup" now activeroot@leekwen:~# mount /dev/mapper/control VolGroup-lv_root VolGroup-lv_swaproot@leekwen:~# mount /dev/mapper/VolGroup-lv_root /mnt/root@leekwen:~# cd /mnt/root@leekwen:/mnt# ls -ltotal 124dr-xr-xr-x. 2 root root 4096 Nov 28 09:27 bindrwxr-xr-x. 2 root root 4096 Nov 24 11:24 bootdrwxr-xr-x. 2 root root 4096 Nov 24 11:24 devdrwxr-xr-x. 120 root root 12288 Dec 2 16:20 etcdrwxr-xr-x. 3 root root 4096 Nov 24 12:32 homedr-xr-xr-x. 18 root root 12288 Nov 28 09:27 libdrwx------. 2 root root 16384 Nov 24 11:23 lost+founddrwxr-xr-x. 5 root root 4096 Dec 2 16:20 mediadrwxr-xr-x. 2 root root 4096 Nov 23 2013 miscdrwxr-xr-x. 2 root root 4096 Sep 23 2011 mntdrwxr-xr-x. 2 root root 4096 Nov 23 2013 net-rw-r--r--. 1 root root 0 Nov 25 11:47 nulldrwxr-xr-x. 4 root root 4096 Dec 2 15:33 optdrwxr-xr-x. 2 root root 4096 Nov 24 11:24 proc-rw-r--r--. 1 root root 137 Dec 2 15:38 profilercdr-xr-x---. 34 root root 4096 Dec 2 16:31 rootdr-xr-xr-x. 2 root root 12288 Nov 28 09:27 sbindrwxr-xr-x. 2 root root 4096 Nov 24 11:25 selinuxdrwxr-xr-x. 2 root root 4096 Sep 23 2011 srvdrwxr-xr-x. 2 root root 4096 Nov 24 11:24 sysdrwxrwxrwt. 33 root root 4096 Dec 2 16:15 tmpdrwxr-xr-x. 12 root root 4096 Nov 24 11:25 usrdrwxr-xr-x. 22 root root 4096 Nov 24 11:50 var注释掉母板中的配置root@leekwen:/mnt/etc/udev/rules.d# cat 70-persistent-net.rules# This file was automatically generated by the /lib/udev/write_net_rules# program, run by the persistent-net-generator.rules rules file.## You can modify it, as long as you keep each rule on a single# line, and change only the value of the NAME= key.# PCI device 0x10ec:0x8168 (r8169)SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:18:7d:a5:35:31", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"# PCI device 0x10ec:0x8168 (r8169)SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:18:7d:a5:35:32", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"root@leekwen:/mnt/etc/udev/rules.d# vim 70-persistent-net.rulesroot@leekwen:/mnt/etc/udev/rules.d# cat 70-persistent-net.rules# This file was automatically generated by the /lib/udev/write_net_rules# program, run by the persistent-net-generator.rules rules file.## You can modify it, as long as you keep each rule on a single# line, and change only the value of the NAME= key.# PCI device 0x10ec:0x8168 (r8169)#SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:18:7d:a5:35:31", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"# PCI device 0x10ec:0x8168 (r8169)#SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:18:7d:a5:35:32", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"查看母板中的网络接口配置文件:root@leekwen:/mnt# cat etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0HWADDR=00:18:7D:A5:35:31TYPE=EthernetUUID=c1843b9a-490a-46f6-87c9-bc734d016f9dONBOOT=yesNM_CONTROLLED=yesBOOTPROTO=dhcproot@leekwen:/mnt# cat etc/sysconfig/network-scripts/ifcfg-eth1DEVICE=eth1HWADDR=00:18:7D:A5:35:32TYPE=EthernetUUID=ac6f78b1-f75e-4ba4-b379-5b9353ad008dONBOOT=yesNM_CONTROLLED=yesBOOTPROTO=dhcp修改网络接口配置文件,如下:root@leekwen:/mnt# cat etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0#HWADDR=00:18:7D:A5:35:31TYPE=Ethernet#UUID=c1843b9a-490a-46f6-87c9-bc734d016f9dONBOOT=yesNM_CONTROLLED=yesBOOTPROTO=dhcproot@leekwen:/mnt# cat etc/sysconfig/network-scripts/ifcfg-eth1DEVICE=eth1#HWADDR=00:18:7D:A5:35:32TYPE=Ethernet#UUID=ac6f78b1-f75e-4ba4-b379-5b9353ad008dONBOOT=yesNM_CONTROLLED=yesBOOTPROTO=dhcp卸载挂载、激活的LVM分区:root@leekwen:~# vgchange -an VolGroup 0 logical volume(s) in volume group "VolGroup" now activeroot@leekwen:~# losetup -d /dev/loop0root@leekwen:~#
按照上述步骤,系统修改完成了。
下步操作就是直接将目前的修改好的这个镜像,写入到新的SSD硬盘上。
1、linux系统下就用dd命令了;
2、windows下就可以用Win32DiskImager.exe,自己写入吧,这里就不赘述了。
- Linux备份系统镜像并对镜像中LVM分区文件的修改
- 挂载虚拟机镜像文件里的 LVM 逻辑分区
- 空手套白狼--基于系统分区镜像的修改
- linux系统安装分区LVM
- linux-loop挂载xen系统文件和LVM分区
- 在Linux系统中挂载LVM分区的步骤
- Linux系统分区为LVM格式的挂载方法
- linux创建并管理LVM分区
- Linux的LVM分区管理
- raspberry noobs 系统分区解析与镜像备份
- LVM磁盘镜像同步备份
- Linux/Unix系统镜像/备份/恢复
- Remastersys备份linux系统ISO镜像
- Linux系统的LVM
- 自动对CF卡分区,并制作LVM卷
- losetup分区过的镜像文件
- 直接挂载虚拟机内为LVM分区的镜像
- Linux挂载LVM分区的方法
- Android性能优化第(二)篇---Memory Monitor检测内存泄露
- 1.SwipeBackLayout左滑返回Activity
- Activity生命周期监听接口:ActivityLifecycleCallbacks
- Messenger浅析
- struts2重定向传多个参数
- Linux备份系统镜像并对镜像中LVM分区文件的修改
- 编写现代 CSS 代码的 20 个建议
- Android Recyclerview的封装
- bat命令oracle自动备份
- 深入浅出Docker(四):Docker的集成测试部署之道
- 读取txt文档中的某一行数据
- 不断重置的前端人生
- Android性能优化第(三)篇---MAT比Menmery Monitor更强大
- java学习日记_92:IO流之递归算法