Ani*_*mus 10 ntfs gentoo wubi loopback ubuntu
好吧,基本上,我正在尝试以类似于 WUBI 的方式启动 Gentoo;我在 ext4 格式的环回文件上安装了 BURG,安装在 Windows 引导加载程序下,内核/initramfs 可用于引导。启动仍然存在一些问题(我认为我可以解决这些问题,它们主要是由于程序本身的小问题)但我有基本的想法:
/root
并切换 root,执行/sbin/init
./host
./host/${LOOP}
)/root
mount -o move /host /root/host
对于busybox)/root
并执行/sbin/init
我init
这里有脚本:
#!/bin/sh
# Rescue shell in case of error.
rescue_shell() {
echo "Something went wrong. Dropping you to a shell."
exec /bin/sh
}
parse_opt() {
case "$1" in
*\=*)
echo "$1" | cut -d= -f2-
;;
esac
}
# Set up BusyBox...
busybox --install -s
# Mount the /proc and /sys filesystems.
mount -t proc none /proc
mount -t sysfs none /sys
# Populate /dev
echo ":: Populating /dev..."
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
# Get command line options...
for x in ${CMDLINE}
do
case "${x}" in
root\=*)
ROOT=`parse_opt "${x}"`
;;
# Loadloop
loop\=*)
LOOP=`parse_opt "${x}"`
;;
ntfsroot)
NTFSROOT=1
;;
esac
done
if [ "${NTFSROOT}" != 1 ]
then
# Mount the root filesystem, plain and simple.
echo ":: Mounting real root..."
mount -o ro "${ROOT}" /mnt/root || rescue_shell
else
# Load up an NTFS-based root.
echo ":: NTFS Root mount requested. Mounting..."
ntfs-3g "${ROOT}" /host
if [ -f "/host/${LOOP}" ]
then
mount -o loop,ro "/host/${LOOP}" /root || rescue_shell
echo ":: Mounted. Moving host..."
mount -o move /host /root/host || rescue_shell
echo ":: Mounted."
else
"!! ERROR: Invalid/nonexistant loop given!"
rescue_shell
fi
fi
# Clean up.
umount /proc
umount /sys
# Boot the real thing.
echo ":: Switching to root and calling init..."
exec switch_root /root /sbin/init
Run Code Online (Sandbox Code Playgroud)
没什么复杂的,真的。NTFS-3G 显然不同意 busybox 实现mount
和东西(它出于某种原因添加了参数 -i,然后ntfs-3g
胡说八道),所以我正在考虑只是复制coreutils
实现或其他东西。那,我需要检查挂载环回分区需要什么(当我尝试手动挂载环回时,它给了我一个类似“找不到文件”的错误)。不过,我认为这些很容易让我自己弄清楚。
但是,我有点想知道是关机。一旦switch_root
完成后,系统会留下一个/
回送挂载文件/dev/sda2
(这是Windows 7安装)上/host
。现在,无法卸载/host
,因为它正在使用中。但是,/
当根目录中的文件系统挂载在子目录中时,无法卸载。基于 WUBI 的 Ubuntu 安装必须面临同样的困境。如何克服这个问题?这是一个先有鸡还是先有蛋的问题,这真的让我很烦。
我正在考虑一些类似于引导脚本的内容,该脚本为基本的基本根目录(如 initramfs,但反过来)保存文件的临时缓存。它会最后运行,将文件复制到 tmpfs,旋转根目录,也许让它回到 initramfs 的原始布局。我基本上会这样做:
tmpfs
at/tmp/shutdown/
什么的。/usr/share/shutdown/
或什么)pivot_root
将根移至/loop
tmpfs 并将 chroot 移入 tmpfs。mount --move
在/loop/host
以/host
/loop
/host
但是,我从未对 Gentoo 进行过如此多的修改。这可以用 initscript 实现吗?我不希望它被 baselayout 的任何更新或任何 ebuild 覆盖,因为这会让我的关机功能中断(而且我真的不想丢失主机分区)。还有一个问题是要弄清楚 Gentoo 的 init 系统是否甚至支持这样的东西。它看起来足够干净(如果有点hackish),但我不太确定。我想知道 Ubuntu 是否有不同的做法,如果有,如何做?任何的意见都将会有帮助。
编辑:
我让引导工作。就像我想的那样,只是使用 的coreutils
版本的问题mount
。但是,我在关机时遇到了预期的错误;无法卸载文件系统的错误和环回 FS 的日志错误。我仍然不知道如何解决这个问题。
编辑2:
好吧,好吧,我有一些事情要做......有点工作。我基本上编辑/etc/init.d/{halt.sh,reboot.sh,shutdown.sh}
并执行了以下操作:
/host
到RC_NO_UMOUNTS
变量中,这会阻止 EXT4 模块因日志错误而窒息-o `pidof ntfs-3g`
到 opts for killall5
(以确保它没有杀死 ntfs-3g)此解决方案仍然低于标准,因此将不胜感激。
-l
懒惰卸载。现在将文件系统从文件系统层次结构中分离出来,并在文件系统不再繁忙时立即清除对文件系统的所有引用。(需要内核 2.4.11 或更高版本。)
归档时间: |
|
查看次数: |
876 次 |
最近记录: |