2010/05/08

mount: mounting /sys on /root/sys failed: No such file or directory - 續

在試過 個人說的 方法後,發現無效......

而高手同事也認為這個和 AppArmor 沒有關係,應該是 initramfs 搞的鬼,不過說也奇怪,如果是 initramfs 的問題,應該在網路上找的到才是,我找半天竟然都找不到,難不成全世界只有我遇到...@@

/usr/share/initramfs-tools/init :
maybe_break mount
log_begin_msg "Mounting root file system... ,alextu:. /scripts/${BOOT}"
. /scripts/${BOOT}
parse_numeric ${ROOT}
mountroot
log_end_msg

maybe_break bottom
[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-bottom"
run_scripts /scripts/init-bottom
[ "$quiet" != "y" ] && log_end_msg

在 init 中可看到 "Running /scripts/init-bottom" 之前執行的是 mountroot
然後在 scripts/local 中的 mountroot function中,看到兩個 FIXME ....@@

# FIXME This has no error checking
modprobe ${FSTYPE}

# FIXME This has no error checking
# Mount root
mount ${roflag} -t ${FSTYPE} ${ROOTFLAGS} ${ROOT} ${rootmnt}
mountroot_status="$?"
if [ "$LOOP" ]; then
if [ "$mountroot_status" != 0 ]; then
if [ ${FSTYPE} = ntfs ] || [ ${FSTYPE} = vfat ]; then
panic "
.........
因為在 error 出現後可以進去 initramfs shell 下指指令,用 ls 看了一下 /root 下根本沒東西,
所以應該是 /root 還沒有準備好,就急著要mount,當然失敗囉。

一開始我笨笨的想說,它明明就有明準備 check $mountroot_status 只要將 $LOOP 設為1就會進入檢查了呀,為何不用...就手動加了 LOOP=1 結果....原本有時可以進os有時進initramfs shell的情況變成每次都進initramfs ....真慘,只好用live cd 重新安裝 initramfs ,果然是 "FIXME"

在 mount 失敗後加上 delay 再重 mount 的 code 後執行 sudo update-initramfs -u 將改好的 script update 進 initramfs 中再重新開機,就是用新的initramfs跑囉。

試過幾次後,發現情況不錯,雖然後來還有幾次會進去initramfs shell 我想可能是我delay不夠久吧....
以上分享給跟我遇到同樣情況的苦主~

沒有留言: