Askaa
发表于 2017-2-23 11:46:56
本帖最后由 Askaa 于 2017-2-23 12:05 编辑
我按你的教程做了ARCH,可惜还是不成功
grub4DOs:
title ARCHGNU uuid-auto-probe
find --set-root --ignore-floppies --ignore-cd /VHD/VHD_Container_System_Archlinux.vhd
uuid ()
kernel/VHD/vmlinuz-linux root=UUID=%?%kloop=/VHD/VHD_Container_System_Archlinux.vhd kroot=/dev/loop0p1 rw
initrd/VHD/initramfs-linux-vhd.img
我在虚拟机里做得
图1是直接用的arch.vhd中的升级成initramfs-linux-vhd.img
图2是我按你说的方法做的
刚才我发现的pacman -Q ntfs-3g是空的,表示没装上?
图片传重复了,不晓得咋删
*****
我又给虚机加了VHD的win10,mount上了可以读,表示ntfs-3g应该编译安装好了
2011niumao
发表于 2017-2-23 13:32:19
本帖最后由 2011niumao 于 2017-2-23 13:40 编辑
Askaa 发表于 2017-2-23 11:46
我按你的教程做了ARCH,可惜还是不成功
grub4DOs:
感觉是ntfs-3g已经安装好了。应该是init没有修改好吧,因为没有执行到kloop的代码那一段。请检查一下
init文件,重新修改一下再次制作initramfs看看。init的约第45行,应该如下rootdev=$(resolve_device "$root") && root=$rootdev
unset rootdev
if [ -z "$kloop" ] && [ -z "$squashfs" ]; then
fsck_root
# Mount root at /new_root
"$mount_handler" /new_root
fi加入了一个 if fi 屏蔽掉通常情形的引导检查挂载根的代码。其下面是
##############################################################
# BOOT FROM VHD, KLOOP by niumao #
##############################################################
if [ -n "$squashfs" ]; then
### reset the value of the root variable
HOSTDEV="${root#block:}"
NEWROOT="/new_root"
###auto probe the fs-type of the partition in which vhd-file live and mount it/host
mkdir -p /host
if [ -z "$hostfstype" ]; then
hostfstype="$(blkid -s TYPE -o value "${HOSTDEV}")"
[ -z "$hostfstype"-o "${hostfstype}" = "ntfs" ] && hostfstype="ntfs-3g"
fi
[ "${hostfstype}" = "ntfs-3g" ] || modprobe ${hostfstype}
mount -t ${hostfstype} -o rw${HOSTDEV}/host
###try to boot from squashfs
mkdir /run/tmpwriteroot /run/tmpreadroot /run/tmpworkdir
mount /host$squashfs /run/tmpreadroot
mount -t overlay overlay -o lowerdir=/run/tmpreadroot,upperdir=/run/tmpwriteroot,workdir=/run/tmpworkdir $NEWROOT
### mount /host in initrd to /host of the realrootfs
if ["${hosthidden}" != "y" ] ; then
[ -d "${NEWROOT}"/host ] || mkdir -p ${NEWROOT}/host
mount --move /host ${NEWROOT}/host
fi
fi
if [ -n "$kloop" ]; then
### reset the value of the root variable
HOSTDEV="${root#block:}"
NEWROOT="/new_root"
[ -n "$kroot" ] && root="$kroot"
[ -n "$kroot" ] || root="/dev/loop0"
export root
realroot="$root"
###auto probe the fs-type of the partition in which vhd-file live and mount it/host
mkdir -p /host
if [ -z "$hostfstype" ]; then
hostfstype="$(blkid -s TYPE -o value "${HOSTDEV}")"
[ -z "$hostfstype"-o "${hostfstype}" = "ntfs" ] && hostfstype="ntfs-3g"
fi
[ "${hostfstype}" = "ntfs-3g" ] || modprobe ${hostfstype}
mount -t ${hostfstype} -o rw${HOSTDEV}/host
### mount the vhd-file on a loop-device
if [ "${kloop#/}" !="${kloop}" ]; then
modprobeloop
partx -av "/host${kloop}"
[ -e "$realroot" ] ||sleep 3
fi
### probe lvm on vhd-file
if [ -n "$klvm" ];then
modprobe dm-mod
vgscan
vgchange-ay$klvm
[ -e "$realroot" ] ||sleep 3
fi
### mount the realroot / in vhd-file on $NEWROOT
if [ -z "${kloopfstype}" ]; then
kloopfstype="$(blkid -s TYPE -o value "$realroot")"
[ -z "${kloopfstype}" ] && kloopfstype="ext4"
fi
[ -e "$realroot" ] ||sleep 3
mount -t "${kloopfstype}" -o rw $realroot $NEWROOT
### mount /host in initrd to /host of the realrootfs
if ["${hosthidden}" != "y" ] ; then
[ -d "${NEWROOT}"/host ] || mkdir -p ${NEWROOT}/host
mount --move /host ${NEWROOT}/host
fi
fi
##############################################################
# end, BOOT FROM VHD, KLOOP by niumao #
##############################################################
run_hookfunctions 'run_latehook' 'late hook' $LATEHOOKS
run_hookfunctions 'run_cleanuphook' 'cleanup hook' $CLEANUPHOOKS
Askaa
发表于 2017-2-23 17:01:41
情况依旧,我又做一遍,仔细用editplus打开init,左右窗口对比了看,都是一样的
能否拜托您做个arch.vhd,里面只有最简单的base就好,我拿来学习下
已经缠绕我一个礼拜了,不得解
2011niumao
发表于 2017-2-23 17:13:50
Askaa 发表于 2017-2-23 17:01
情况依旧,我又做一遍,仔细用editplus打开init,左右窗口对比了看,都是一样的
能否拜托您做个arch.vhd, ...
从头制作不必要。像这样引导固定vhd 引导只读squashfs的只依赖与initramfs一个文件。我上传一个制作好的,内核版本好象是 4.9.8-1 你可以适当改名字后使用他们引导。请到一楼第一个链接里面的archlinux子目录内下载.
Askaa
发表于 2017-2-24 11:36:18
本帖最后由 Askaa 于 2017-2-24 11:37 编辑
2011niumao 发表于 2017-2-23 17:13
从头制作不必要。像这样引导固定vhd 引导只读squashfs的只依赖与initramfs一个文件。我上传一个制作好的 ...
现在用了你的initramfs后我的ARCH-VHD可以动了,启动正常进入console,但是在虚拟机内无网卡,ip a 只能看见lo,进入xfce4会死机,我观察了下你做的initramfs,只有22m,比我的原始initramfs(30M)小了很多,大概是你精简过内核适应于你的硬件,可以分享下你编译arch的时的系统么?
2011niumao
发表于 2017-2-24 15:06:59
Askaa 发表于 2017-2-24 11:36
现在用了你的initramfs后我的ARCH-VHD可以动了,启动正常进入console,但是在虚拟机内无网卡,ip a 只 ...
祝贺能启动了。我的系统安装了很多东西,已经24G大小了。呵呵。
进入图形界面死机可能是版本不一致的原因。建议还是自己系统上制作initramfs.
附上一个我这里的init.放在第一楼链接的archlinux目录内。建议你先把你系统的init文件备份移走,把这个init拷贝的正确位置,再制作initramfs,这样版本就一致了。
ge
发表于 2017-3-6 13:00:24
本帖最后由 ge 于 2017-3-6 13:06 编辑
看不懂呀!
第一步,已经在虚拟机安装完成UBUNTU了!没有重启到桌面!
第二步,安装kpartx等软件是在虚拟机下安装吗?
其它需要什么文件?怎么修改!
2011niumao
发表于 2017-3-6 15:57:56
ge 发表于 2017-3-6 13:00
看不懂呀!
第一步,已经在虚拟机安装完成UBUNTU了!没有重启到桌面!
第二步,安装kpartx等软件是在虚拟 ...
第一步你需要百度看看安装方面的教程。第二步,主要是两点,其一,编译安装ntfs-3g(源文件已经有了);其二,制作可以引导固定vhd的initrd.img,需要修改文件有四个,sudo gedit /usr/share/initramfs-tools/scripts/local /usr/sbin/mkinitramfs /etc/initramfs-tools/modules /usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g 。如何修改行看说明。
ge
发表于 2017-3-6 16:04:59
做一个简单点的批处理就好了!真的看不明白!
jxdeng2017
发表于 2017-4-14 16:18:08
本帖最后由 jxdeng2017 于 2017-4-14 16:28 编辑
LZ好,好久没有跟您学习了。最近单位在用中标麒麟的LINUX 服务器系统,我弄了一个桌面版,易用性挺好,于是想借助您的方法,做成VHD。按照Fedorakloop 的步骤一点也没报错, 引导菜单也没问题,启动时,在找USB 3.0 时 死循环了。无法进到系统 (命令行也不行!),不知是何原因?用您已做好的Fedora kloop 的 vmlinuz和dracut-fedora-kloop也不行, 直接到命令行界面, VHD 文件已mount 上了.......。看来只有大神来解决了。
中标麒麟桌面版:https://pan.baidu.com/s/1i4Xcf69
jxdeng2017
发表于 2017-4-14 16:18:58
本帖最后由 jxdeng2017 于 2017-4-14 16:24 编辑
LZ好,好久没有跟您学习了。最近单位在用中标麒麟的LINUX 服务器系统,我弄了一个桌面版,易用性挺好,于是想借助您的方法,做成VHD。按照Fedorakloop 的步骤一点也没报错, 引导菜单也没问题,启动时,在找USB 3.0 时 死循环了。无法进到系统 (命令行也不行!),不知是何原因?看来只有大神来解决了。
2011niumao
发表于 2017-4-15 13:33:45
本帖最后由 2011niumao 于 2017-4-15 13:35 编辑
jxdeng2017 发表于 2017-4-14 16:18
LZ好,好久没有跟您学习了。最近单位在用中标麒麟的LINUX 服务器系统,我弄了一个桌面版,易用性挺好,于是 ...
看不出错误信息,不知道出错的原因。怀疑是那个 10-vhdmount-kloop.sh没有装入到内核初始盘里面。
需要再检查一下制作 dracut的过程或命令。试试以下命令
sudo dracut--include /home/niumao/mydracut/10-vhdmount-kloop.sh /lib/dracut/hooks/pre-mount/10-vhdmount-kloop.sh--no-hostonly--install " vi /etc/virc ps grep cat rm blkid losetupkpartx partx mount.fuse mount.ntfs-3g ntfs-3g shutdownlvmvgchangevgmknodesvgscandmsetup dmeventd" --add-drivers"fuse dm-mod "-o " plymouth btrfs cryptcifs fcoe fcoe-uefi iscsi nfs nbd"/home/niumao/dracut-fedora-kloop
把两个 niumao改为你的用户名,mydracut目录放在主目录里面。(主要是 -i 改用 --include这个是新版本opensuse要求的)。
jxdeng2017
发表于 2017-4-17 09:16:45
谢谢LZ的指点,重新按LZ的提示做了一次,新生成的dracut-neokylin-kloop 文件略小了一点,替换后,仍然报错,卡死在同样的地方。但是有一个问题,Neokylin Linux 在 /lib/dracut/ 下 没有 hooks 目录。 不知是否要手动建 hooks/pro-mount 目录? 我把两次生成的LOG发上来,请大神指点迷津。
2011niumao
发表于 2017-4-17 12:29:57
jxdeng2017 发表于 2017-4-17 09:16
谢谢LZ的指点,重新按LZ的提示做了一次,新生成的dracut-neokylin-kloop 文件略小了一点,替换后,仍然报错 ...
看来原因就是10-vhdmount-kloop.sh那个文件没有塞入到dracut里了。
把目标路径加上/usr看看,尝试以下代码。/usr/bin/dracut --include /home/jxdeng/mydracut/10-vhdmount-kloop.sh /usr/lib/dracut/hooks/pre-mount/10-vhdmount-kloop.sh --no-hostonly --install " vi /etc/virc ps grep cat rm blkid losetupkpartx partx mount.fuse mount.ntfs-3g ntfs-3g shutdownlvmvgchangevgmknodesvgscandmsetup dmeventd" --add-drivers "fuse dm-mod " -o " plymouth btrfs cryptcifs fcoe fcoe-uefi iscsi nfs nbd" /home/jxdeng/dracut-neokylin-kloop
jxdeng2017
发表于 2017-4-17 13:05:16
本帖最后由 jxdeng2017 于 2017-4-17 13:08 编辑
LZ, 各种linux 对dracut有差异,Neokylin确实定义了 /usr/lib/dracut/hooks 目录,但是在hooks 下没有 pre-mount 目录,手工建一个pre-mount 后,使用您的那个大命令行,10-vhdmount-kloop.sh 插不到该目录下,不知何故?可以手工先拷贝到该位置吗?( /usr/lib/dracut/hooks/pre-mount)
2011niumao
发表于 2017-4-17 15:05:37
jxdeng2017 发表于 2017-4-17 13:05
LZ, 各种linux 对dracut有差异,Neokylin确实定义了 /usr/lib/dracut/hooks 目录,但是在hooks 下没有 pr ...
我感觉是可以的。可以尝试看看。
不过注意这里的/usr/lib/dracut/hook指的是在dracut里面的路径。
猜测是dracut命令的脚本会把实际系统的/usr/lib/dracut/hook下面的文件拷贝到dracut里面的同名处。这样你
预先拷贝进去的文件,就可以塞到dracut里面了。
在dracut里面,也许有lib目录,也许lib只是到/usr/lib的软连接。
jxdeng2017
发表于 2017-4-17 19:01:02
本帖最后由 jxdeng2017 于 2017-4-17 19:02 编辑
报告LZ, 按上面的提示,重新生成dracut-neokylin 后,没有进步,仍然 报同样的 USB 3.0 的问题,检查了一下, 系统已经进到命令行,只是屏幕上报 无法加载 USB 3.0 。 检查了dracut.log ,没有发现生成内核时出什么问题。下午又拿一个Mageia Linux 5.1测试了一下,系统能完全启动到命令行,也报无法加载USB 3.0 同样的错,用您的内核 和我自己定制的内核都一样。看来 是否跟机器硬件有关,我的设备是Thinkpad S3 ,带触摸屏的。
但是,UbuntuKylin 没有任何问题,完美启动到图形界面。 下一步怎么搞,没有了方向,请大神指点。
2011niumao
发表于 2017-4-17 21:17:32
jxdeng2017 发表于 2017-4-17 19:01
报告LZ, 按上面的提示,重新生成dracut-neokylin 后,没有进步,仍然 报同样的 USB 3.0 的问题,检查了一下 ...
如果是硬件问题,我也不会的。奇怪。
2011niumao
发表于 2017-4-17 21:17:32
本帖最后由 2011niumao 于 2017-4-18 20:18 编辑
jxdeng2017 发表于 2017-4-17 19:01
报告LZ, 按上面的提示,重新生成dracut-neokylin 后,没有进步,仍然 报同样的 USB 3.0 的问题,检查了一下 ...
下载了你帖子里面的链接。制作好后发现之所以失败,是因为Neokylin系统启动时候没有自动生成/dev/loop0到/dev/loop7.
需要在10-vhdmount-kloop.sh里面,kpartx命令上面加入一个命令mknod /dev/loop0 b 7 0
mknod /dev/loop1 b 7 1手工创建/dev/loop0 /dev/loop1(为保险多创建一个,也可以创建上8个)。然后重新制作dracut就成功引导了。
在一楼链接上传了两个文件,vmlinuz-neokinitrd.img-neok,你可以直接下载使用它们引导。
2011niumao
发表于 2017-4-18 19:32:57
本帖最后由 2011niumao 于 2017-4-18 20:18 编辑
2011niumao 发表于 2017-4-17 21:17
如果是硬件问题,我也不会的。奇怪。
我已经制作成功了。用附件替换掉10-vhdmount-kloop.sh。重新制作dracut后成功。
/usr/bin/dracut --include /home/jxdeng/mydracut/10-vhdmount-kloop.sh/lib/dracut/hooks/pre-mount/10-vhdmount-kloop.sh --no-hostonly --install " vi /etc/virc ps grep cat rm blkid losetupkpartx partx mount.fuse mount.ntfs-3g ntfs-3g shutdownlvmvgchangevgmknodesvgscandmsetup dmeventd" --add-drivers "fuse dm-mod " -o " plymouth btrfs cryptcifs fcoe fcoe-uefi iscsi nfs nbd" /home/jxdeng/dracut-neokylin-kloop
记住把两个niumao更改为用户名。
jxdeng2017
发表于 2017-4-19 13:25:32
本帖最后由 jxdeng2017 于 2017-4-19 13:55 编辑
感谢LZ指点, 按您的新脚本,我试了一下,跟以前没有什么区别,倒是让我发现了问题, /host已经mount上,但是 kpartx -av /host$kloop不行,报不能 mount loop 等.... 我核对了一下 引导参数 kroot和分区发现了问题, 我的 kroot=/dev/mapper/loop0p1, 但是 我的分区是 、/dev/sda1是一个EFI分区,/dev/sda2 是swap,/dev/sda3 才是 根 / 分区。 但是 我改 kroot=/dev/mapper/loop0p3 也一样报错。 哪里错了,请指点。
引导串:
================
menuentry" NeoKylin Linux 16.04 (VHD) 2 " --class neokylin --class fedora{
recordfail
insmod gzio
insmod part_msdos
insmod part_gpt
insmod ext2
insmod ntfs
insmod probe
insmod search
search --no-floppy -f --set=aabbcc/LinVHD/NeoKylin6/NeoKylin6.vhd
set root=${aabbcc}
probe -u --set=ddeeff ${aabbcc}
linux /LinVHD/NeoKylin6/vmlinuz-neokylinroot=UUID=${ddeeff} kloop=/LinVHD/NeoKylin6/NeoKylin6.vhd kroot=/dev/mapper/loop0p1
initrd /LinVHD/NeoKylin6/dracut-neokylin-kloop
}
==================
jxdeng2017
发表于 2017-4-19 15:12:37
报告LZ , 您的定制和我自己的定制都成功了,问题也找到了, 还是 kroot 参数配置问题,把我的 kroot 改成kroot=/dev/mapper/loop0p3即可, 对应上 根 /dev/sda3 ,当然还是老大对 Nerkylin 没有定义 dev/loop0到/dev/loop7 等设备的 发现 ,最终解决了问题。值得祝贺。 赞。
2011niumao
发表于 2017-4-19 18:24:16
jxdeng2017 发表于 2017-4-19 15:12
报告LZ , 您的定制和我自己的定制都成功了,问题也找到了, 还是 kroot 参数配置问题,把我的 kroot 改成kr ...
恭喜!
2011niumao
发表于 2017-4-19 18:24:17
jxdeng2017 发表于 2017-4-19 15:12
报告LZ , 您的定制和我自己的定制都成功了,问题也找到了, 还是 kroot 参数配置问题,把我的 kroot 改成kr ...
恭喜!
jxdeng2017
发表于 2017-4-19 19:04:13
本帖最后由 jxdeng2017 于 2017-4-19 19:09 编辑
要感谢大神的指点。
中标麒麟 太像Windows XP 了。很不错。 今天又试着 做了一下 优麒麟(UBUNTUKYLIN 17.0464位版),最近发布的17.04版本默认使用UKUI桌面环境。从内到外都焕然一新,内核更新为Linux Kernel 4.10版本。 我用LZ的Ubuntu 16.04 的方法 定制了initrd.img ,定制过程没有出一点错,但是 引导时 出现死机,是panic 报错。
看来,有要请大神费神了。 顺便,我的优麒麟(UBUNTUKYLIN 16.0464位版) 运行的很好。
UBUNTUKYLIN 17.0464位版
内存崩溃:
2011niumao
发表于 2017-4-19 21:54:55
jxdeng2017 发表于 2017-4-19 19:04
要感谢大神的指点。
中标麒麟 太像Windows XP 了。很不错。 今天又试着 做了一下 优麒麟(UBUNTUKYLIN 17 ...
下载安装后,制作initrd.img没有问题,成功引导了固定vhd了。中间有个错误,是因为
UKylin没有安装kpartx 进入到了initramfs界面,后来手工安装了kpartx后重新制作就可以引导了。
至于这个panic错误,我也经历过多次,都是由于init与 local文件里面有语法错误引起的,所以
请你检查一下这两个文件,看看是不是少了花括号 } ,少了 与if 相配对的 fi 语句。
制作好的Ukylin引导文件已经上传,4.10.0-19 (64位) 可在一楼第一个链接下载。
jxdeng2017
发表于 2017-4-20 09:28:17
本帖最后由 jxdeng2017 于 2017-4-20 09:31 编辑
LZ 经验丰富! 果然,我在/usr/share/initramfs-tools/scripts/local 文件中插入大神的代码时 不小心 多了一个 },导致代码出错。 我还以为是内核的问题。谢谢LZ指点。又成功了。看来LZ的方法通用性不错。
发两张图,感谢大神的指点,支持中文LINUX !
中标麒麟 6: XPUI
优麒麟17.04: UKUI
jxdeng2017
发表于 2017-4-20 14:39:15
LZ好,还有两个问题请指教。
1、有些Linux版本没有 kpartx ,dm-setup ,怎么手工安装?在不使用LVM 时 ,dm-setup , lvm2 是否可以不安装?
2、教程中需要改动的几个文件,init 、local、module等 仅仅是为定制initrd 用的吗?也就是开机启动 LINUX.VHD使用的吗? 如果是的话,那么用LZ定制好的各版本initrd不就可以启动相应的系统了吗? 可是,我拿你的mageia 4 定制内核启动 我的mageia 5 还是有问题的?比较迷糊了,请指点。
jxdeng2017
发表于 2017-4-20 14:46:19
LZ 还有 一般桌面版系统基本上都安装了ntfs-3g ,能 mount NTFS分区了。还需要安装你的ntfs-3g **.fix 吗? 你能否把手工安装kpartx, util-linux ,dm-setup 的方法 一并写到教程里?
2011niumao
发表于 2017-4-20 20:17:17
本帖最后由 2011niumao 于 2017-4-20 20:23 编辑
jxdeng2017 发表于 2017-4-20 14:46
LZ 还有 一般桌面版系统基本上都安装了ntfs-3g ,能 mount NTFS分区了。还需要安装你的ntfs-3g **.fix 吗? ...
还是需要手工编译安装那个修改好的ntfs-3g的,也许不修改也能引导起来,但不修改会在关机时候有 buffer i/o 错误,下次再开机可能需要作磁盘检查的。(此外附带的修改好的ntfs-3g是最新的版本)
至于各个linux发行版安装kpartx dm-setuo的方法,主要是从各自的源里安装的,应该是比较基本的命令了。
所以只写了ubuntu的命令,其他照着参考或稍加修改应该可以的。
如果不使用LVM时候,不需要安装lvm2,但是dm-stup存疑,不清楚是不是必须的。
所有修改的文件都是为了制作initrd的。原理上,制作好的initrd可以引导很多系统。
这里面ubuntu的通用型最好。
Mageia好像特殊一些。好像不能跨版本吧。就算是同一个系统,升级后旧内核都不好引导起来。
arch也是如此。
记得Mageia会自动安装显卡的闭源驱动,所以升级内核后会有问题的。