Linux系统全盘备份方法


    公司有台服务器,搬家搬过来搬过去的,现在都搞不清楚是谁负责的机器。白白放置了一个多月,期间也发过公告,也没同事响应。单用户进入系统之后,发现里面都是很老的数据,但是又不确定是否有用,也不敢乱来。so,  把硬盘的数据全部拷贝出来,免得白白浪费资源。

方案1:

    直接复制整个硬盘,非常底层的数据复制,包括 boot loader 和分区表在内的所有数据都能完整的复制。不过目标盘的容量不能比源盘的容量低,否则文件系统容易悲剧(强烈建议:最好两块硬盘是同一容量和同一型号,否则比较麻烦。)。而且这种方式需要拷贝整个硬盘,即使你什么文件也没写,速度也很慢。

dd 命令可以复制单块硬盘:

# dd if=/dev/sda of=/dev/sdb & ddpid=$!

可以在另一个终端向 dd进程发送 USR1 信号, 查看当前进度

# kill -USR1 $ddpid

也可以同时复制到多块硬盘

# dd if=/dev/sda | tee >(dd of=/dev/sdb) >(dd of=/dev/sdc) >(dd of=/dev/sdd) > /dev/null

另外还有 G4L, CloneZilla这样的工具也可以进行全盘复制。


方案2:

1、挂载硬盘,添加分区

第一步:添加硬盘/新建分区(fdisk)

第二步:格式化分区(mkfs.ext4)

第三步:加载分区(mount)


1、第一步:添加硬盘/新建分区(fdisk) 

a、查看当前系统所有硬盘及分区情况:fdisk -l
b、在指定的硬盘(例:/dev/sda)上创建分区:fdisk /dev/sdb , 根据提示进行下一步操作,如:查看帮助(h),新建分区(n),删除分区(d),查看分区情况(p)
c、分区成功后,写分区表并退出(w)

注:fdisk 支持硬盘最大尺寸为 2TB,更详细说明请参看 Linux 在线手册(man fdisk)或百度一下。

2、第二步:格式化分区(mkfs.ext4) 

对新建分区(例:/dev/sda1)进行格式化:mkfs.ext4 /dev/sdb1 。

3、第三步:加载分区 

a、创建分区挂接目录,例:mkdir /disk-cache-1 和 mkdir /disk-cache-2
b、编辑 /etc/fstab 配置文件,将分区信息写进去。
c、加载新建分区:mount -a


2、复制文件系统根目录,注意要排除目标盘 mount 的目录和系统自己 mount 的目录(可以用 mount -l 查看,比如/proc,/sys 这些目录)

# su - root
# cd /

# tar -cvpzf /mnt/backup.tgz --exclude=/proc --exclude=/sys --exclude=/lost+found --exclude=/mnt --exclude=/media --exclude=/var/tmp  /

或者
# tar c --exclude=/proc/* --exclude=$EXCLUDE_DIR / | (cd /mnt/sdb2; tar x)

c – 新建一个备份文档
v – 详细模式, tar程序将在屏幕上实时输出所有信息。
p – 保存许可,并应用到所有文件。
z – 采用‘gzip’压缩备份文件,以减小备份文件体积。
f – 说明备份文件存放的路径, /mnt/backup.tgz 是本例子中备份文件名。这个备份文件备份的位置是其它分区,也就是原来的WIN分区中。来看看我们想要包含的目录,我们不想备份所有的东西,因为有些目录是没有多大用处的。确认你不想包含的文件,否则您会得到一个很奇怪的结果。您也不必备份/mnt 目录下的东西,除非您有其他分区挂在它下面或者你坚持要备份。您还必须确保没有任何资源挂在 /media目录下(比如,任何CD或者移动存储介质),否则,剔除/media。

最后一个参数是我们想要保存的目录. 我们想要保存所有的东西,使用 / 作为根目录。

3、还原的方法:请注意,可能会覆盖您原有的数据,下面的操作必须小心。。

# tar -xvpzf /mnt/backup.tgz -C /

参数x是告诉tar程序解压缩备份文件。 -C 参数是指定tar程序解压缩到的目录。


如果要把系统也搬过去,那么情况稍微复杂一点。

    用fdisk 对新硬盘进行分区,然后通过 mkfs.ext4 / mkswap 创建好文件系统和 swap分区,然后把分区 mount挂载到系统上。

    修改 /etc/fstab,现在的linux系统基本都是通过 UUID 而不是 /dev/sdc1这样的方式来进行挂载的,所以要修改成新硬盘相应分区的UUID。

安装 boot loader

    一开始我们以为直接用 dd 复制源硬盘 MBR 的前 446 字节(启动代码部分)过去就可以了,但启动发现连 grub 菜单都进不去。

    其实 grub 启动包含了两个阶段的代码,第一阶段代码是在 MBR 里的,第二阶段在文件系统上,那么 grub 如何从第一阶段跳转到第二阶段呢?它是把第二阶段代码所在的磁盘扇区位置记录在 MBR 中 [1]。而这份代码在每块硬盘上的位置肯定是不一样的,于是 grub 没办法跳转到第二阶段继续执行。

    所以我们得重新安装 boot loader:

# grub-install --root-directory=/mnt/sdb2

这里 --root-directory 是告诉 grub 说我们的根文件系统是在 sdb2 上而不是源硬盘上。


方案3:

可以试试 rsync   第一次全同步相当于复制 以后只同步修改过的文件。(我没有试过)



本文出自 “Share your knowledge” 博客,请务必保留此出处http://skypegnu1.blog.51cto.com/8991766/1653272

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。