LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 735|回复: 0

关于liveusb与ntfs的问题

[复制链接]
发表于 2008-6-7 10:40:44 | 显示全部楼层 |阅读模式
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!!

这个问题困扰了我多日,希望在次论坛能到解决。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表