关于liveusb与ntfs的问题

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
头像
yaska
帖子: 1169
注册时间: 2007-10-28 21:35

关于liveusb与ntfs的问题

#1

帖子 yaska » 2008-06-06 20:52

liveusb的iso文件放到ntfs分区上会导致无法正常重启或者关机。

原因:
先简单说说重启过程, 实际上是执行init 6,/etc/rc6.d下的脚本会被依次执行:
首先所有分区会被卸载,但是如果iso文件是放到ntfs分区的话,由于它里面的root文件映像是挂到 / 的,所有不能正常卸载。
执行到etc/rc6.d/S20sendsig ,这个脚本调用killall5 默认会把除了/sbin/getty的进程全部kill 掉, 当然也就包括ntfs-3g, ntfs-3g被killl了,意味着 / 被强行卸载了,接下来的reboot将无法运行。

多次强行kill会破坏ntfs分区上的文件系统. 如果上面有windows的话,这样的操作多了,系统会崩溃。

解决方法(暂时的):
1.修改/etc/rc6.d/S20sendsig里,killall5时跳过ntfs-3g,这个很简单。
2.修改reboot脚本, 在执行reboot之前,用pivot_root转移文件系统,先sync同步cache,再kill掉ntfs-3g。

类似的脚本如下:
log_action_msg "Will now restart"
cd /initrd
mount --move /dev dev/
pivot_root . root
mount -n -t proc none /proc
/bin/sync;/bin/sync;/bin/sync
pkill -15 ntfs
exec chroot . /sbin/shutdown.sh /sbin/reboot -d -f -i

/initrd为initrd.img挂载的目录
/initrd/root为文件系统挂载的目录。
pivot_root . root 的意思是把文件系统 从/initrd/root 移到/initrd
如果不先用pivot_root转移文件系统,pkil ntfs-3g之后,chroot命令是无法执行的。

存在问题:
pivot_root是关键所在,initrd.img是initramfs方式的话,上面这个方法行得通,但如果是 cpio格式(内核处理方式不一样),pivot_root . root 这一步会报错,提示Device or Source busy!!

想了几天,毫无头绪,发到论坛集思广益,各位谁有兴趣的参与讨论吧。
回复