无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: 2011niumao
打印 上一主题 下一主题

[发布] SQUASHFS系统UBUNTU20.04与18.04,VHD系统UBUNTU16.04(64位)

    [复制链接]
1#
发表于 2015-11-17 09:16:14 | 显示全部楼层
本帖最后由 ee1 于 2015-11-17 09:54 编辑
2011niumao 发表于 2013-6-20 21:58
GRUB4DOS引导vbuntufix.vhd的菜单一种新法
=======不需要外部的vmlinuz initrd.img的文件,直接用vhd内部 ...


这个办法好!
原来 vhd 也能map ,呵呵,很好!

title UBUNTU MAP
find  --set-root --ignore-floppies --ignore-cd /kan/u.vhd
map  /kan/u.vhd (hd)
map  --hook

kernel (hd-1,0)/vmlinuz root=/dev/sda1 vloop=/kan/u.vhd vlooppart=p1
initrd (hd-1,0)/initrd.img


能进到initramfs ,可以看到/kan/u.vhd已经mount ,但是无法mount root,奇怪

init脚本怎样修改?  挂载根分区
或者在initramfs 手动怎样挂载 root?

点评

请到一楼的链接下载vloop教程 kloop教程,任选其一按照教程制作。  详情 回复 发表于 2015-11-17 09:58
回复

使用道具 举报

2#
发表于 2015-11-17 10:00:59 | 显示全部楼层
2011niumao 发表于 2015-11-17 09:58
请到 http://bbs.wuyou.net/forum.php?mod=viewthread&tid=336079&extra=page%3D1 一楼的链接下载vloop ...

在initramfs 手动怎样挂载 root? 不用改动vhd 里面的initrd.img

点评

还是使用mount命令吧。使用kpartx -av挂载vhd到loop设备上,再把/dev/mapper/loop0p1挂载到/root。 手工chroot到/root。具体命令百度看看。  详情 回复 发表于 2015-11-17 10:15
回复

使用道具 举报

3#
发表于 2015-11-17 10:20:32 | 显示全部楼层
2011niumao 发表于 2015-11-17 10:15
还是使用mount命令挂载ntfs分区。使用kpartx -av挂载vhd到loop设备上,再把/dev/mapper/loop0p1挂载到/ ...

好的,试一下,多谢!
回复

使用道具 举报

4#
发表于 2015-11-17 10:45:31 | 显示全部楼层
2011niumao 发表于 2015-11-17 10:15
还是使用mount命令挂载ntfs分区。使用kpartx -av挂载vhd到loop设备上,再把/dev/mapper/loop0p1挂载到/ ...

需要kpartx ,initramfs 里面没有kpartx,看来 重做initrd.img是必须的

点评

嗯。需要给initrd.img加入一些原来没有的功能就必须重新制作initrd.img。 以下是在initramfs环境下手工启动的几个命令。测验还是成功的。供参考。 加括号的是上一行命令的变化,似乎都可以。  详情 回复 发表于 2015-11-17 10:55
回复

使用道具 举报

5#
发表于 2015-11-17 11:06:54 | 显示全部楼层
2011niumao 发表于 2015-11-17 10:55
嗯。需要给initrd.img加入一些原来没有的功能就必须重新制作initrd.img。
以下是在initramfs环境下手工 ...

多谢LZ!

现在把在真机里启动VHD的LINUX原理算是弄明白了,关键是挂在u.vhd
这样普适大多数LINUX发行版!
回复

使用道具 举报

6#
发表于 2015-11-17 16:31:30 | 显示全部楼层
本帖最后由 ee1 于 2015-11-17 16:37 编辑
2011niumao 发表于 2015-11-17 10:55
嗯。需要给initrd.img加入一些原来没有的功能就必须重新制作initrd.img。
以下是在initramfs环境下手工 ...


呵呵,做好了
进入initramfs以后
mkdir -p /media
mount -t ntfs-3g -o rw /dev/sda2 /media
kpartx -av /media/kan/u.vhd
mount -t ext4 -o rw /dev/mapper/loop0p1 /root
exec chroot /root /sbin/init
就这样能启动了

要点是在vbox 进虚拟机
sudo apt-get install kpartx
然后编辑/usr/sbin/mkinitramfs只需要在# util-linux加入下面两行
copy_exec /sbin/losetup /sbin
copy_exec /sbin/kpartx /sbin

sudo /usr/sbin/mkinitramfs -o   /initrd.img 重做initrd.img
要是想不敲那几行命令  修改下/usr/share/initramfs-tools/scripts/local 我这儿没试

我这儿没装kpartx-boot,
这俩做好vhd貌似就有了,util-linux dmsetup
fedora是有kpartx这个包,http://mirrors.aliyun.com/fedora ... -80.fc23.x86_64.rpm
centos 里面没有kpartx这个包  epel仓库也没有,安装fedora 的kpartx包可能管用。。。

点评

对很多发行版,可以使用 partx 来代替 kpartx。这样就不用特意安装kpartx了。 命令一样 但注意其输出和kpartx 不一样,VHD的各个分区挂到的LOOP设备名称是 /dev/loop0p1 /dev/loop0p3 等等, 没有kpartx命令时  详情 回复 发表于 2015-11-19 13:20
很好的简化。  发表于 2015-11-18 18:28
回复

使用道具 举报

7#
发表于 2015-11-29 15:36:56 | 显示全部楼层
本帖最后由 ee1 于 2015-11-29 15:39 编辑
2011niumao 发表于 2015-11-19 13:20
对很多发行版,可以使用 partx 来代替 kpartx。这样就不用特意安装kpartx了。
命令一样  
但注意其输 ...


centos7 有kpartx,

kpartx  -av VHD      ,之后 显示添加 loop0p1
loop0p1的位置即不在/dev/mapper/loop0p1 也不在/dev/loop0p1 奇怪了!用losetup也能看到loop0p1 确找不到loop0p1的位置!
手动 和用05-vhdmount.sh都无法启动
fedora和 centos 差别好大啊

点评

奇怪。记得我装的centos是在/dev/mapper/loop0p1.现在已经删除也没有办法验证。 那可以暂时性使用ubuntu的两个内核文件 或者 Fedora的两个内核 引导centos 。 我这里好像都是可以引导成功的。  详情 回复 发表于 2015-11-29 17:11
回复

使用道具 举报

8#
发表于 2015-11-29 17:33:26 | 显示全部楼层
本帖最后由 ee1 于 2015-11-29 17:47 编辑
2011niumao 发表于 2015-11-29 17:11
奇怪。记得我装的centos是在/dev/mapper/loop0p1.现在已经删除也没有办法验证。
那可以暂时性使用ubuntu ...


最小化安装了centos7, kpartx和losetup已经有了
又安装了ntfs-3g, 会不会少什么?
关键是kpartx  -av VHD      ,之后 显示添加了 loop0p1

确找不到loop0p1,  loop0位置在/dev/loop0

ubuntu没问题。
回复

使用道具 举报

9#
发表于 2015-11-29 19:39:25 | 显示全部楼层

dmsetup是自带的,加入到dracut 不起作用

要用dmsetup创建 /dev/mapper/loop0p1  ?

点评

倒不是.按理 kpartx 可以自动调用 losetup 和 dmsetup 的. 你这里的 vhd 是固定大小的吧? 如果不是,就需要把系统转移到一个固定vhd上. 如果是固定大小的,就需要深入分析 kpartx 的脚本来看原因了.  详情 回复 发表于 2015-11-29 22:06
回复

使用道具 举报

10#
发表于 2015-12-1 11:19:31 | 显示全部楼层
本帖最后由 ee1 于 2015-12-1 11:31 编辑
2011niumao 发表于 2015-11-29 22:06
倒不是.按理 kpartx 可以自动调用 losetup 和 dmsetup 的.
你这里的 vhd 是固定大小的吧? 如果不是,就需 ...


找到loop0p1的位置了,
用kpartx  -av centos.vhd   loop0p1的位置是/dev/dm-0,
在vbox里/dev/mapper/loop0p1是/dev/dm-0的链接, 在dracut里 的确没有/dev/mapper/loop0p1 这个奇怪!
其实centos7也有partx,用partx  -av centos.vhd    loop0p1的位置是/dev/loop0p1

但是centos.vhd放在ntfs分区无法启动,出现很多错误,
有ext4-fs error ,loop error,
buffer I/O error 也有,重新编译ntfs-3g只对buffer I/O error有用?

现在可以确定出现这些错误是systemd和ntfs有冲突造成的

把centos.vhd放在一个fat32格式的读卡器上可以正常启动了!  centos.vhd只有3G,呵呵


                if ismounted "$NEWROOT"; then
                        umount    "$NEWROOT"
                fi

mkdir -p /me
mount -t vfat -o rw /dev/sdb1 /me
partx -av centos.vhd
mount -t ext4 -o rw /dev/loop0p1 /$NEWROOT
vhdmount.sh就这样写

centos和ubuntu不同最后挂到/root就直接 system halt 必须挂到/$NEWROOT !

sudo dracut -i /home/mydracut/vhdmount.sh /lib/dracut/hooks/pre-mount/vhdmount.sh  /home/dracut

再编译个ntfs-3g看有没有用

论坛经常无法登录!究竟怎么回事?

点评

祝贺。 ntfs-3g编译后可以读写挂载ntfs分区。不编译的话,使用内核自带的ntfs驱动,只能只读挂载ntfs分区, 导致不能启动vhd。 启动时候,直接使用 kroot=/dev/dm-0也许也可以引导,只要出现/dev/dm-o。 估  详情 回复 发表于 2015-12-1 15:52
回复

使用道具 举报

11#
发表于 2015-12-2 17:26:02 | 显示全部楼层

RE: VHD系统 UBUNTU 14.04LTS 64位。欢迎使用。

2011niumao 发表于 2015-12-1 15:52
祝贺。

ntfs-3g编译后可以读写挂载ntfs分区。不编译的话,使用内核自带的ntfs驱动,只能只读挂载nt ...

编译ntfs-3g可以从ntfs分区启动了,
在ntfs-3g_ntfsprogs/src/ntfs-3g.c这个文件
这个位置
#include <unistd.h>

int main(int argc, char *argv[]) {
添加
        if (access("/etc/initrd-release", F_OK) >= 0)
                argv[0][0] = '@'
这两行
编译 安装就可以了
centos 没有/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g 这个文件
别的什么也不用改,所有error 都消失了!


其实我现在主要在vbox 里用linux 只有 有程序要在真机上跑 才从vhd启动
以前 在硬盘上留了两个逻辑盘 ,专门为安装 linux 和 mac os x,现在都删了,
ide硬盘一百多G 快没空间了, mac os x也不用了,留个linux 在vbox跑跑。

点评

祝贺。 但我这里有些问题。在内核4版本以上,会出现 blk_update_request 错误,不管是ubuntu fedora等等都有这个错误,不妨碍使用,就是觉得不完美。但内核版本3时候就没有。很奇怪。  详情 回复 发表于 2015-12-3 09:16
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-11 16:42

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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