免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5422 | 回复: 2
打印 上一主题 下一主题

dd或cpio备份linux [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-05-16 21:32 |只看该作者 |倒序浏览
#先做一张能启动到应急方式的应急启动光盘或下载个光盘linux.
#测试环境:/dev/sda1及/dev/sda2分别是目标linux系统的boot及root,/dev/sdb1是swap,/dev/sdc1用来暂存dd结果:
#cdlinux启动或磁盘启动到单用户方式
mount /dev/sdc1 /mnt
#备份硬盘前8M,含分区表,直接恢复可省去fdisk
dd if=/dev/sda bs=100k count=80|gzip -9>/mnt/sda-8M.dd.gz
#备份boot
dd if=/dev/sda1 bs=100k |gzip -9>/mnt/boot.dd.gz
#分段dd root,(一般为sda3,我的虚拟机将swap放在第2块盘上,root在sda2,mount看确认一下)每段2G.
ROOT=/dev/sda2
#以k为单位查一下root的大小:
set -x
mkdir /sda2
mount /dev/sda2 /sda2
rootsize=`df -k $ROOT|awk '$1=="'$ROOT'"{print $2;exit;}'`
#rootsize=5052060
n=`awk 'BEGIN{print int('$rootsize'/100)+2}'`
umount /sda2
echo "#restore root from dd">/mnt/restore-root.sh
i=0
while [ $i -le $n ];do
  echo "gzip -dc </mnt/root-$i.dd.gz|dd bs=100k  seek=$i of=$ROOT">>/mnt/restore-root-dd.sh
  time dd if=$ROOT bs=100k skip=$i count=20000 |gzip -9>/mnt/root-$i.dd.gz
  i=`expr $i + 20000`
done
#恢复测试:
#恢复时,hd00每道扇区数及磁头数应与原来一样,磁道数大于等于原来的。应急盘启动,mount好/mnt
#我不会做linux应急启动盘,主要不知道怎么做个小root。用CDlinux启动,新建虚拟机第1块硬盘
#恢复磁盘前8M,含分区表,省去fdisk。你也可以fdisk进行分区,跳过下一行。
mount /dev/sdc1 /mnt
#先用fdisk -l看了一下,/dev/sda包含非法分区
gzip -dc </mnt/sda-8M.dd.gz>/dev/sda
#再fdisk -l看一下,/dev/sda的分区表已有,与原来的一样。
#写一下分区表,以便访问boot及root
fdisk /dev/sda
w
#恢复boot
gzip -dc</mnt/boot.dd.gz>/dev/sda1
#恢复root
sh -x /mnt/restore-root-dd.sh
#拿掉光盘重启动硬盘,OK。

cpio备份方案:
#启动cdlinux,或其它应急盘方式(不推荐启动目标系统):
#假定/mnt是mount好的文件系统,用来暂存备份结果文件:
set -x
mkdir /sda1;mount /dev/sda1 /sda1
mkdir /sda2;mount /dev/sda2 /sda2
mkdir /mnt;mount /dev/sdc1 /mnt
#备份所有盘分区结构(文本方式)
fdisk -l >/mnt/fdisk.txt
#备份第1块盘前8M,含分区表:
dd if=/dev/sda bs=100k count=80|gzip -9>/mnt/sda-8M.dd.gz
#cdlinux带的cpio(BusyBox v1.15.3)结果必须存文件,无法使用输出管道进行压缩.用我目标机上的cpio
echo "/bin/ls"|cpio -ovB 2>&1 >/dev/null
cp /sda2/bin/cpio /mnt/cpio
cp /sda2/bin/cpio /bin/cpio
#备份boot
cd /sda1;
find . -mount -depth -print|/mnt/cpio -ovB 2>/mnt/boot.cpio.log |gzip -9>/mnt/boot.cpio.gz
#备份root,SCO及FAT32有2G文件大小限制,linux我不知道.我采用2G大小(压缩前)分块备份保存.
i=0
ROOT=/dev/sda2
#cpio结果文件压缩前可能比原来文件的大.测试时按原文件大小计算dd次数结果没备份全.
#推荐按使用空间放大2-3倍计算dd次数(*3为放大3倍).
n=`df -k $ROOT|awk '$1=="'$ROOT'"{print int($3/100)*3}'`
echo "
#restore root from cpio
mkdir /sda2;mount /dev/sda2 /sda2
cd /sda2
(">/mnt/restore-root-cpio.sh
cd /sda2;
find . -mount -depth -print>/mnt/root.files
cat /mnt/root.files|/mnt/cpio -ovB 2>/mnt/root.cpio.log|while [ $i -le $n ];do
   echo "doing:gzip -9>/mnt/root-$i.cpio.gz" 1>&2
   echo "gzip -d </mnt/root-$i.cpio.gz">>/mnt/restore-root-cpio.sh
   dd bs=100k count=20000 2>/mnt/root-$i.dd.log|gzip -9>/mnt/root-$i.cpio.gz
   i=`expr $i + 20000`
done
echo ')|/mnt/cpio -iuvdmB 2>/mnt/root-restorefromcpio.log2 >/mnt/root-restorefromcpio.log'>>/mnt/restore-root-cpio.sh
#恢复测试提醒:破坏第1块硬盘全盘数据!!!)
#cdlinux或应急盘启动:
mount /dev/sdc1 /mnt
#恢复磁盘前8M,可以省去fdisk。你也可以自己手工fdisk分区。
gzip -d </mnt/sda-8M.dd.gz>/dev/sda
#写一下分区表,以便访问sda1及sda2(手工mknod建/dev/sda1也访问不了。谁知道更直接的命令使sda1可访问?)
fdisk /dev/sda
w
#格式化并恢复boot
mkfs.ext3  /dev/sda1
mkdir /sda1;mount /dev/sda1 /sda1;
cd /sda1;gzip -d </mnt/boot.cpio.gz|/mnt/cpio -iuvdmB 2>&1 >/mnt/boot.restorefromcpio.log
#格式化并恢复root
mkfs.ext3 /dev/sda2
mkdir /sda2;mount /dev/sda2 /sda2
cd /sda2;
sh -x /mnt/restore-root-cpio.sh
#修复grub启动
/sda2/sbin/grub
root (hd0,0)
setup (hd0)
quit
#拿走光盘重启动,OK。
sync
reboot
================================
几种备份方法比较:
1、cpio:传统、通用、可靠;但不包含磁盘分区结构。要fdisk分好区才能恢复。
   兼容性好,磁盘结构可以不同,要恢复的分区大小可以随便调。可以选择性恢复部分文件。
   慢!
2、ghost:省事,会的人也多。恢复时要求每道磁头数及扇区数与原盘不同会有问题吧?我不知道。
   ghost整盘最省事,但拉圾全在上面,但太大了;
3、dd:每道磁头数及扇区数最好与原盘相同,与ghost差不多原理。
   dd sda相当于ghost整盘;比ghost优点是可以选择文件系统进行备份。

论坛徽章:
0
2 [报告]
发表于 2010-05-16 21:47 |只看该作者
#备份硬盘前8M,含分区表,直接恢复可省去fdisk
dd if=/dev/sda bs=100k count=80|gzip -9>/mnt/sda-8M.dd.gz


bs和count的大小要根据需要备份分区的大小设定?如果多一点会怎么样?gzip压缩比例范围是多少?

论坛徽章:
0
3 [报告]
发表于 2010-05-17 02:48 |只看该作者
回复 2# wwr


bs默认值是1b=512字节,速度慢.
count不加是备份整个硬盘.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP