|
|
发表于 2006-11-1 20:03:53
|
显示全部楼层
某位前辈发过一个这样的帖子,刚才找不到了,内容如下:
准备工作
快速浏览...在准备备份整个操作系统的时候,不要忘了清理回收站,和所有在/home目录下或桌面上的没有用的文件。
取决于您备份系统的初衷,您也许会删除所有的email,清空浏览器的搜索记录,清除保存在浏览器的个人信息。我通常保存上述所有东西的,如果您特别注重安全,就不要象我这样做了。
开始备份
“那我该用什么来备份我的系统呢?”也许你会问。小事一桩,就像你备份或压缩一个别的文件一样,TAR。不像Windows,Linux不限制根用户存取任何东西,因此,你完全可以把一个分区上每一个的文件放入一个TAR文件中。
来实施这一方法,用这个成为根用户:
sudo su
下面转到您的文件系统根目录下 (这里只是我们的一个例子,您可以转到任何一个您想备份的目录下,包括远程或可移动驱动器。)
cd /
然后,下面就是我用来备份我的系统的完整的命令:
tar -cvpzf /backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/backup.tgz --exclude=/mnt --exclude=/sys /
接着,让我们稍微解释一下:
* 'tar' 是用来备份的程序
* c - 新建一个备份文档
* v - 详细模式, tar程序将在屏幕上实时输出所有信息。
* p - 保存许可,并应用到所有文件。
* z - 采用‘gzip’压缩备份文件,以减小备份文件体积。
*
f <filename> - 说明备份文件存放的路径, /backup.tgz 是本例子中备份文件名。
* 来看看我们想要包含的目录。我们不想备份所有的东西,因为有些目录是没有多大用处的。确认你不想包含的文件,否则您会得到一个很奇怪的结果。 您也不必备份 /mnt 目录下的东西,除非您有其他分区挂在它下面或者你坚持要备份。您还必须确保没有任何资源挂在 /media 目录下(比如,任何CD或者移动存储介质).否则,剔除/media。
* 最后一个参数是我们想要保存的目录. 我们想要保存所有的东西,使用 / 作为根目录。
如果您想包含其他文件系统,您可以使用“l”来替代 --exclude。上述指令可以写成:
tar -cvpzlf /backup.tgz --exclude=/lost+found --exclude=/backup.tgz /
按:kvidell在论坛主题里建议也剔除/dev目录。不过,我有其他证据表明这样做是不明智的。
好了,如果命令适合你的话,敲击确定键(或者回车键,管它叫什么名字),然后什么都不用干,放松一下。备份也许会花上一段时间。
最后您将在文件系统的根目录下看到一个名为backup.tgz的文件,很可能相当巨大。您现在可以将它刻录到DVD光盘上或者转移到其他任何一台电脑上,随便您!
[attachment:IconsPage/IconWarning3.png] 警告: 文件大小超过2GB (实际上没这么大) 不被ISO9660所支持,可能将不可还原。不要简单的将如此巨大的.iso文件刻录在DVD上。使用split命令分割文件或者其他不同的方法将它刻录在DVD上。下面是一个可能的方法(未经测试):
sudo tar --create --bzip2 --exclude /tmp --one-file-system --sparse / | growisofs -use-the-force-luke -Z /dev/hda=/proc/self/fd/0
需 要指出的是,这只是备份了一个文件系统。您也许需要使用 --exclude 来替代 --one-file-system 用来过滤您不想备份的东西。 这里假设您的DVD设备在 /dev/hda下。它不是新建一个可挂载的DVD,而是还原您指向这个设备里的文件内容。
sudo tar --extract --bzip2 --file /dev/hda
备注2: 在程序运行的最后,您也许会看到这样一条诸如'tar: Error exit delayed from previous errors'或者其他什么的警告信息在大多数情况下您完全可以忽略它。
另外,您也可以使用Bzip2来压缩您的备份文件。它具有更高的压缩比,只是压缩速度有些慢。如果压缩比对你很重要,只需用“j”替换命令中的“z”, 同时给备份命一个相应的扩展名。这些会使命令变成这样:
tar -cvpjf /backup.tar.bz2 --exclude=/proc --exclude=/lost+found --exclude=/backup.tar.bz2 --exclude=/mnt --exclude=/sys /
通过网络进行备份
如果系统的空间不足而且您无法挂载其他文件系统用来存放备份文件,那么可行的方法就是使用netcat在网络上传输备份文件。
在接收端,您需要象下面这样设置netcat来写入备份文件:
nc -l -p 1024 > backup.tar.bz2
然后象下面这样在发送端的netcat里输入不带'f'标志位的tar指令:
tar -cvpj <all those other options> / | nc -q 0 <receiving host> 1024
在上面的指令中,1024只是一个随机的端口号。所有工作都将通过1024端口完成。
如果一切顺利,备份文件将直接通过网络传输,而不接触正在读取的文件系统。 在一个相对高速的网络环境内,这样的备份速度实际上比在本地磁盘上备份要来的快。
以下是完整的指令格式:
tar -cvpj <all those other options> / | ssh <remote host> "cat > backup.tar.bz2"
还原操作
[attachment:IconsPage/IconWarning3.png] 警告: 求您了,看在上帝的份上,千万小心这儿。如果您不明白您正在干什么,那很有可能覆盖掉您重要的数据,所以请特别小心!
好了,继续我们前面章节所讲的例子,我们在系统根目录下创建了一个名为backup.tgz的备份文件。
再一次确认,您现在正在根目录下,备份文件也在系统的根目录下。
Linux 中美妙的事情之一就是在系统正在运行的情况下可以进行还原操作,而不需要启动光盘或者其他任何乱七八糟的东西。当然,如果您的系统已经崩溃,那您必须选择使用live CD,但是结果还是一样。你甚至可以在Linux系统正在运行的时候,移除它里面所有文件。可是我不告诉你那个命令!
好了,言归正传。这是我要用的命令:
tar -xvpzf /backup.tgz -C /
如果您使用的是bz2压缩的:
tar -xvpjf backup.tar.bz2 -C /
参数x是告诉tar程序解压缩备份文件。 -C <directory> 参数是指定tar程序解压缩到的目录。 ( 在本例中是/ )
[attachment:IconsPage/IconWarning3.png] 警告: 备份文档中的文件将覆盖分区中的文件!
注意,磁盘上备份里没有的文件并不会自动删除。
只要敲一下确定/回车/你的兄弟/随便什么,然后去看焰火吧。同样,这会花一段时间。等它完成了,你就有了一个完全恢复的Ubuntu系统!只需确保在你做其他任何事情之前,重新创建你剔除的目录: ( /proc, /lost+found, /mnt, /sys, 等等。)
mkdir /proc /lost+found /mnt /sys
。
好了。
GRUB的还原
现在,如果您想要移动系统到一个新的磁盘上或者曾经在GRUB上做过了一些改动(比如说,安装Windows)。您将必须重新安装GRUB。 在论坛上有一些非常好的指导方法,所以我不想再重复了。看一看这个文章: here (论坛) 或者这里: RecoveringUbuntuAfterInstallingWindows
论坛上提供了2种方法,我个人推荐第二种由remmelt提供的方法,因为我发现它每次都管用。
就是这样,我希望这有用。
其他方法
dd
指令:
dd -if /dev/hda1 > partitionimage.dd
将备份这个分区。使用/dev/hda作为输入文件名将备份整个驱动器。还原操作如下:
dd -if partitionimage.dd -of /dev/hda1
您也可以使用gzip或者bzip2来压缩镜像。
rsync
Rsync只更新已经改变了的文件,甚至只传输文件中被改变的那部分。这在通过网络备份文件的方法中对于节省带宽非常的有用。出于安全考虑,2台机器的传输都必须使用SSH协议,Rsync特别适用于备份home目录下的文件。
这是向远程计算机传送的指令:
sudo rsync --delete -azvv -e ssh /home remoteuser@remotehost.remotedomain:./backupdirectory
-z 压缩数据 --delete 删除系统中曾经在备份文件的时候不存在的文件。您有可能想这样做,有可能不想。 -a 保存文件的日期和时间 (和 -t的含义一样), 遍历所有目录(和 -r额含义一样), 以symlink形式保存symlink信息 (和-l的含义一样), 保存文件许可 (和 -p的含义一样), 保存组信息 (和 -g含义一样), 保存文件所有权信息 (和 -o含义一样), 以设备形式保存设备信息 (和 -D的含义一样). -vv 保存程序运行信息。 |
|