ubuntu PE (8.10)
-
- 帖子: 3681
- 注册时间: 2008-05-03 23:42
Re: ubuntu PE (8.10)
谢谢指点。我今天成功地把虚拟机里 ext3 分区上的系统迁移到了物理机 reiserfs 分区上,目前一切正常,哈哈。用 squashfs 来备份,老兄的这个点子还真不赖。Good bye Ghost。下面打算研究一下 aufs ,还要向老兄请教。
我不喜欢再借助 livecd 或 livecd iso。从备份的 squashfs 直接启动是很酷的。如果要借助另一个工具,我觉得就用类似你的这个 pe 就好,嗯,我还要把它再弄小一点,不要图形界面,最多弄个 twm 来跑 gparted,对于专用于备份恢复,这样就够了。
我不喜欢再借助 livecd 或 livecd iso。从备份的 squashfs 直接启动是很酷的。如果要借助另一个工具,我觉得就用类似你的这个 pe 就好,嗯,我还要把它再弄小一点,不要图形界面,最多弄个 twm 来跑 gparted,对于专用于备份恢复,这样就够了。
- ptptptptptpt
- 帖子: 3711
- 注册时间: 2006-09-19 18:16
Re: ubuntu PE (8.10)
两种方法各有优缺点,搞得我一直犹豫不决我不喜欢再借助 livecd 或 livecd iso。从备份的 squashfs 直接启动是很酷的。

- ptptptptptpt
- 帖子: 3711
- 注册时间: 2006-09-19 18:16
-
- 帖子: 3681
- 注册时间: 2008-05-03 23:42
Re: ubuntu PE (8.10)
我粗略看了一下,处理 menu.lst 好像有问题,OLD_UUID 不应该是当前 / 的 uuid ,比如现在是在 livecd 下。应该直接到 menu.lst 里截取。
另外还缺了安装 grub 的步骤,只能用 grub4dos 引导。
还可以在脚本开头增加的是判断当前的分区表是否存在错误,如果分区表本来就乱了,就应该避免操作。
fdisk 不会检查分区表,只会给出分区表。
sudo parted -l
会检查分区表的正确性,不过只要 sda sdb sdc ... 中有一个正确,返回值就是 0 ,所以不能用 $? 来检查,只能从输出信息中寻找 "error" 或 "错误"
或者用
sudo parted /dev/sda print
sudo parted /dev/sdb print
来一个一个地检查磁盘,这就可以用 $? 来检测了。
可以用一个 u 盘来生成错误的分区表用来测试
sudo dd if=/dev/sda of=/dev/sdb bs=512 count=1
就在 u 盘 sdb 产生了错误的分区表
另外还缺了安装 grub 的步骤,只能用 grub4dos 引导。
还可以在脚本开头增加的是判断当前的分区表是否存在错误,如果分区表本来就乱了,就应该避免操作。
fdisk 不会检查分区表,只会给出分区表。
sudo parted -l
会检查分区表的正确性,不过只要 sda sdb sdc ... 中有一个正确,返回值就是 0 ,所以不能用 $? 来检查,只能从输出信息中寻找 "error" 或 "错误"
或者用
sudo parted /dev/sda print
sudo parted /dev/sdb print
来一个一个地检查磁盘,这就可以用 $? 来检测了。
可以用一个 u 盘来生成错误的分区表用来测试
sudo dd if=/dev/sda of=/dev/sdb bs=512 count=1
就在 u 盘 sdb 产生了错误的分区表
- ptptptptptpt
- 帖子: 3711
- 注册时间: 2006-09-19 18:16
Re: ubuntu PE (8.10)
对对,忘了说了。这个改自 ubuntu-cloner ,最后这部分懒得改了,记得你写过一个处理 UUID 的脚本,你来搞一搞吧处理 menu.lst 好像有问题,OLD_UUID 不应该是当前 / 的 uuid ,

-
- 帖子: 3681
- 注册时间: 2008-05-03 23:42
Re: ubuntu PE (8.10)
我觉得写个处理 uuid 和 grub 的就好了。前面的分区规划这些情况太复杂,由用户自己做。用户做起来是简单的,编程考虑是复杂的。比如你根本想不到这个脚本对我的 macbook 是没用的 - fdisk 列不出我的 gpt 分区表。(fdisk 只用于 msdos mbr 型,parted 才能列出一切已知类型分区表)
-
- 帖子: 3681
- 注册时间: 2008-05-03 23:42
Re: ubuntu PE (8.10)
squashfs 启动有啥问题呢ptptptptptpt 写了:两种方法各有优缺点,搞得我一直犹豫不决我不喜欢再借助 livecd 或 livecd iso。从备份的 squashfs 直接启动是很酷的。
- ptptptptptpt
- 帖子: 3711
- 注册时间: 2006-09-19 18:16
Re: ubuntu PE (8.10)
一言难尽。。。可能得定制 initrd ,还需要源系统安装了一些包——这些包在不同版本的 ubuntu 是不同的。自己做一个“ghost”版还好说,针对具体情况具体操作。可要是想写一个备份工具给不同的人用、把不同的系统备份成可启动的 squashfs ,就复杂了,因为可能性太多,每个人的系统都不一样squashfs 启动有啥问题呢
其实我更喜欢类似 win7 的安装方式 ——启动 pe ,恢复系统映像,设置。pe 和 系统映像 各司其职,清晰明了。所以才做了这个 ubuntu pe ,用它来备份、恢复系统。这种方式的问题是:备份时需要用户指定要备份的系统分区;对于占用多个分区的系统,处理起来比较麻烦。
- ptptptptptpt
- 帖子: 3711
- 注册时间: 2006-09-19 18:16
Re: ubuntu PE (8.10)
对了,上面那个脚本是在另一系统中恢复 squashfs 映像。如果是从 squashfs 启动的,两个 rsync 行需酌情更改——还得看启动后 squashfs 挂载那个目录。官方是 /rofs
-
- 帖子: 3681
- 注册时间: 2008-05-03 23:42
Re: ubuntu PE (8.10)
为啥用 rsync? cp -a 不好吗
- ptptptptptpt
- 帖子: 3711
- 注册时间: 2006-09-19 18:16
Re: ubuntu PE (8.10)
也可以。其实我一直用 cp -a ,后来看了一些脚本,都是用 rsync 。似乎 rsync 更专业一些
似乎可选参数更多。

-
- 帖子: 3681
- 注册时间: 2008-05-03 23:42
Re: ubuntu PE (8.10)
关于老兄的 ubuntu-cloner
要 exclude 好些目录。其实 /dev/ 下面还有一些东西。
实际上一个分区可以有多个挂载点。在系统运行中可以把根分区在 /mnt 下再挂载一次。比如我的根分区是 /dev/sda5,现在他同时挂载在 / 和 /mnt 下。查看 / 和 /mnt 可以看到他们的不同,基本上就是那些你要 exclude 的东西,除了 tmp 是真写在分区里的,以及 media 下面确实有挂载目录(但他们是空的,所以克隆了也无妨),/dev/ 也清爽了(我一直担心 dev)
我的设想是这样,根据 fstab,在 /mnt 或者其他空目录下重建一棵文件树,这棵树确实是磁盘上真正存在的文件。不挂载 fstab 里自动挂载的 fat/ntfs 分区。然后就可以把 /mnt 打包成 squashfs。排除掉 squashfs 本身,如果愿意,排除掉 tmp 目录。还排除掉 fstab 和 menu.lst
从 squashfs 启动。用户自己规划分区,格式化分区,并把分区在 /target , /target/home , ... 下挂载组织好。我们的脚本只要做这些事情:
cp -a 本squashfs内容 /target
安装 grub 和 生成 fstab
这个最好 chroot 到 /target 底下 update-grub 就可以生成新的 menu.lst 了,不用我们操心,对于有 /boot 的,update-grub 也会应付。我的经验,最好在原来没有 menu.lst 和 menu.lst~ 的情况下运行 update-grub,100%成功。(老的 menu.lst 里残存的注释信息会干扰 update-grub 运作。menu.lst~ 似乎有时候也会)
然后我们还要用 grub-install 来安装 grub,默认到 / 或 /boot,要 mbr 用户自己搞。root (hdx,y) setup (hdz,w) 的可靠性不如 grub-install ,尤其在恢复时更换了文件系统之后。
生成 fstab。这个写起来比较讨厌。pt 帮看一下安装程序是怎么弄的,有没有可以直接拿来的,像 update-grub 那样现成的 update-fstab ?
要 exclude 好些目录。其实 /dev/ 下面还有一些东西。
实际上一个分区可以有多个挂载点。在系统运行中可以把根分区在 /mnt 下再挂载一次。比如我的根分区是 /dev/sda5,现在他同时挂载在 / 和 /mnt 下。查看 / 和 /mnt 可以看到他们的不同,基本上就是那些你要 exclude 的东西,除了 tmp 是真写在分区里的,以及 media 下面确实有挂载目录(但他们是空的,所以克隆了也无妨),/dev/ 也清爽了(我一直担心 dev)
我的设想是这样,根据 fstab,在 /mnt 或者其他空目录下重建一棵文件树,这棵树确实是磁盘上真正存在的文件。不挂载 fstab 里自动挂载的 fat/ntfs 分区。然后就可以把 /mnt 打包成 squashfs。排除掉 squashfs 本身,如果愿意,排除掉 tmp 目录。还排除掉 fstab 和 menu.lst
从 squashfs 启动。用户自己规划分区,格式化分区,并把分区在 /target , /target/home , ... 下挂载组织好。我们的脚本只要做这些事情:
cp -a 本squashfs内容 /target
安装 grub 和 生成 fstab
这个最好 chroot 到 /target 底下 update-grub 就可以生成新的 menu.lst 了,不用我们操心,对于有 /boot 的,update-grub 也会应付。我的经验,最好在原来没有 menu.lst 和 menu.lst~ 的情况下运行 update-grub,100%成功。(老的 menu.lst 里残存的注释信息会干扰 update-grub 运作。menu.lst~ 似乎有时候也会)
然后我们还要用 grub-install 来安装 grub,默认到 / 或 /boot,要 mbr 用户自己搞。root (hdx,y) setup (hdz,w) 的可靠性不如 grub-install ,尤其在恢复时更换了文件系统之后。
生成 fstab。这个写起来比较讨厌。pt 帮看一下安装程序是怎么弄的,有没有可以直接拿来的,像 update-grub 那样现成的 update-fstab ?
上次由 billbear 在 2009-02-08 17:09,总共编辑 1 次。
- ptptptptptpt
- 帖子: 3711
- 注册时间: 2006-09-19 18:16
Re: ubuntu PE (8.10)
哦。。还可以这样啊。。。
印象中,安装程序生成 fstab 用的就是 ubuntu-cloner 里的方法,只是复杂的多,因为要应对多种文件系统、多个挂载点。 ubuntu-cloner 里大大简化了,因为只有两种fs可选,只有一两个挂载点要处理。
印象中,安装程序生成 fstab 用的就是 ubuntu-cloner 里的方法,只是复杂的多,因为要应对多种文件系统、多个挂载点。 ubuntu-cloner 里大大简化了,因为只有两种fs可选,只有一两个挂载点要处理。
- ptptptptptpt
- 帖子: 3711
- 注册时间: 2006-09-19 18:16
Re: ubuntu PE (8.10)
似乎 /dev/ 下的东西是无关紧要的,似乎 initrd 会生成新的 dev 挂载到 /dev
-
- 帖子: 3681
- 注册时间: 2008-05-03 23:42
Re: ubuntu PE (8.10)
只有根分区的,其实把挂载根分区的那句从 fstab 里拿掉就行了。不管 fstab 里写不写,根分区自然要挂载的。