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,自己写入吧,这里就不赘述了。


0 0
原创粉丝点击