当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 1 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 关于liveusb与ntfs的问题
帖子发表于 : 2008-06-06 20:52 
头像

注册: 2007-10-28 21:35
帖子: 1169
送出感谢: 0 次
接收感谢: 2
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!!

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


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 1 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 5 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译