无忧启动论坛

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

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

    [复制链接]
 楼主| 发表于 2016-12-26 14:28:35 | 显示全部楼层
本帖最后由 2011niumao 于 2016-12-26 14:30 编辑
玉尺书生 发表于 2016-12-25 20:17
好像是引导参数不正确


这个原来也出现过。不知道什么原因利用UUID做root参数有时候会失效。
此时,可以按e键进入编辑模式,把引导菜单的 root=UUID=XXXXXXXXXXXXX手工更改为
root=/dev/sdaX              X 是vhd文件所在分区序号。再按F10 继续引导即可。

点评

http://reboot.pro/topic/20603-linux-from-vhd-how-to/page-2 在一个英文网站上查到了一个解释。看来,自动探测UUID 并把它作为参数传递给内核之所以有时候失败, 毛病出在ntfs-3g上,可能ntfs-3g不太认识UUID参  详情 回复 发表于 2017-1-2 16:21
回复

使用道具 举报

发表于 2016-12-27 16:34:04 | 显示全部楼层
等待回复:我是SSD硬盘,启动时找不到硬盘,另外……进不了系统。问下,SSDJ不行吗?

点评

在引导菜单按c键进入cmd模式.可以 ls 看看有没有ssd硬盘.再ls分区看看.  详情 回复 发表于 2016-12-27 17:36
有可能SSD不行.也许有其他原因. 我手里没有SSD,没有测试过.  详情 回复 发表于 2016-12-27 17:28
回复

使用道具 举报

 楼主| 发表于 2016-12-27 17:28:14 | 显示全部楼层
scflh 发表于 2016-12-27 16:34
等待回复:我是SSD硬盘,启动时找不到硬盘,另外……进不了系统。问下,SSDJ不行吗?

有可能SSD不行.也许有其他原因.   我手里没有SSD,没有测试过.
回复

使用道具 举报

 楼主| 发表于 2016-12-27 17:36:18 | 显示全部楼层
scflh 发表于 2016-12-27 16:34
等待回复:我是SSD硬盘,启动时找不到硬盘,另外……进不了系统。问下,SSDJ不行吗?

在引导菜单按c键进入cmd模式.可以 ls  看看有没有ssd硬盘.再ls分区看看.
  1. ls (hd2,1)
复制代码

回复

使用道具 举报

发表于 2016-12-29 12:03:51 | 显示全部楼层
谢谢,我启动成功了。
另外,我是USB无线网络。这个不会设置,想请教一下楼主……。
我用的启动方法是:GURB FOR DOS
回复

使用道具 举报

 楼主| 发表于 2016-12-29 12:41:06 | 显示全部楼层
这个我也不会。没有USB网卡,没有做过的。再百度百度看看
回复

使用道具 举报

发表于 2016-12-29 17:31:37 | 显示全部楼层
我用DEEPIN15.3做了VHD启动,USB网卡直接即插即用
回复

使用道具 举报

发表于 2016-12-30 08:05:07 来自手机 | 显示全部楼层
本帖最后由 b3ar6 于 2016-12-30 08:09 编辑

请问我用vbox安装了ubuntu14.04,也将能启动的4.4内核拷到了/lib/module,但为何依然不能启动呢?
或者说如何才能引导启动ubuntu14.04 vhd呢?谢谢~

点评

请给出出错信息。另外可以在一楼第一个链接下载vmlinuz initrd.img,使用他们引导试试。  详情 回复 发表于 2016-12-31 09:22
回复

使用道具 举报

发表于 2016-12-30 11:44:27 | 显示全部楼层
我下载的那个最新的,可以启动了……无线网卡没弄好……

点评

那个系统是简化系统,由一个网友ghostplant简化的。所以可能缺少一些驱动。 建议下载一个完整版本UBUNTU 1604,自己制作一个vhd系统。 注意 必须是固定大小的vhd。 制作可引导固定vhd的内和初始内存盘的方法在一  详情 回复 发表于 2016-12-30 18:03
回复

使用道具 举报

发表于 2016-12-30 11:45:25 | 显示全部楼层
是USB的无线卡网……
回复

使用道具 举报

发表于 2016-12-30 12:18:01 来自手机 | 显示全部楼层
2011niumao 发表于 2016-12-26 14:28
这个原来也出现过。不知道什么原因利用UUID做root参数有时候会失效。
此时,可以按e键进入编辑模式, ...

请问我用vbox安装了ubuntu14.04,也将能启动的4.4内核拷到了/lib/module,但为何依然不能启动呢?
或者说如何才能引导启动ubuntu14.04 vhd呢?谢谢~
回复

使用道具 举报

发表于 2016-12-30 13:18:41 来自手机 | 显示全部楼层
玉尺书生 发表于 2016-12-29 17:31
我用DEEPIN15.3做了VHD启动,USB网卡直接即插即用

请问如何用DEEPIN15.3做VHD启动的呢?能指导一下吗?谢谢~

点评

制作可引导固定vhd的内和初始内存盘的方法在一楼第一个连接里面的mydracut压缩文件内。 解压后找到ubuntu子目录,内有方法说明。  详情 回复 发表于 2016-12-30 18:03
回复

使用道具 举报

 楼主| 发表于 2016-12-30 18:03:16 | 显示全部楼层
scflh 发表于 2016-12-30 11:44
我下载的那个最新的,可以启动了……无线网卡没弄好……

那个系统是简化系统,由一个网友ghostplant简化的。所以可能缺少一些驱动。
建议下载一个完整版本UBUNTU 1604,自己制作一个vhd系统。
注意 必须是固定大小的vhd。
制作可引导固定vhd的内和初始内存盘的方法在一楼第一个连接里面的mydracut压缩文件内。
解压后找到ubuntu子目录,内有方法说明。
回复

使用道具 举报

 楼主| 发表于 2016-12-30 18:03:29 | 显示全部楼层
b3ar6 发表于 2016-12-30 13:18
请问如何用DEEPIN15.3做VHD启动的呢?能指导一下吗?谢谢~

制作可引导固定vhd的内和初始内存盘的方法在一楼第一个连接里面的mydracut压缩文件内。
解压后找到ubuntu子目录,内有方法说明。
回复

使用道具 举报

 楼主| 发表于 2016-12-31 09:22:24 | 显示全部楼层
b3ar6 发表于 2016-12-30 08:05
请问我用vbox安装了ubuntu14.04,也将能启动的4.4内核拷到了/lib/module,但为何依然不能启动呢?
或者说 ...


必须是固定大小vid。最好给出出错信息。另外可以在一楼第一个链接下载vmlinuz  initrd.img,使用他们引导试试。
回复

使用道具 举报

发表于 2016-12-31 12:07:06 来自手机 | 显示全部楼层
2011niumao 发表于 2016-12-31 09:22
必须是固定大小vid。最好给出出错信息。另外可以在一楼第一个链接下载vmlinuz  initrd.img,使用他们引 ...

非常感谢您!我修改了一下grubefi cfg,参照你说的说明文档,可以启动了,ubuntu14.04。
回复

使用道具 举报

 楼主| 发表于 2017-1-2 16:21:42 | 显示全部楼层
本帖最后由 2011niumao 于 2017-1-2 16:25 编辑
2011niumao 发表于 2016-12-26 14:28
这个原来也出现过。不知道什么原因利用UUID做root参数有时候会失效。
此时,可以按e键进入编辑模式, ...


http://reboot.pro/topic/20603-linux-from-vhd-how-to/page-2
在一个英文网站上查到了一个解释。看来,自动探测UUID 并把它作为参数传递给内核之所以有时候失败,
毛病出在ntfs-3g上,可能ntfs-3g不太认识UUID参数。
另外这个链接也说明老外们也在关注这里的引导linux vhd的方法。有意思。

一点引用
Now y try this...



title UBT-small.vhd
find --set-root --ignore-floppies --ignore-cd  /ubuntu/UBT-small.vhd
uuid ()
kernel /ubuntu/vmlinuz  root=UUID=%?%  kloop=/ubuntu/UBT-small.vhd  kroot=/dev/mapper/loop0p1
initrd  /ubuntu/initrd.img



But no luck, when booting the first step is mount ntfs partition with ntfs-3g and return this error:

mount -t netfs-3g uuid=xxxxxxxxxxxxxx no such file or ....

Any idea ?

点评

感觉最新版的ntfs-3g (2016.2.22)已经解决了这个问题。重新上传了一个mydracut.zip。 内含最新版修改好的ntfs-3g。有兴趣者请重新下载并且重新编译安装ntfs-3g,制作initrd.img。  详情 回复 发表于 2017-1-5 10:54
回复

使用道具 举报

 楼主| 发表于 2017-1-2 16:27:04 | 显示全部楼层
tritant 的解决方案,记录一下。
Thx for your reply Wonko, but I have found a other solution :sudo mount -t ntfs-3g `blkid -U 6054DA9E54DA766E` /host
回复

使用道具 举报

发表于 2017-1-3 20:38:16 | 显示全部楼层
过来看看
回复

使用道具 举报

 楼主| 发表于 2017-1-5 10:54:52 | 显示全部楼层

UUID失效原因

本帖最后由 2011niumao 于 2017-1-11 22:11 编辑
linux会把启动参数 UUID=12345678 指向到 /dev/disk/by-uuid/12345678的快捷方式,而快捷方式指向的就是对应设备 /dev/sda 之类的。
会不会是 mount的时机早了点,by-uuid 目录的快捷方式还没生成,所以才会找不到设备呢?不知从这方面着手会不会有点思路。

原来的写法,跳过了系统对于引导参数的解析和改造,所以root参数只能原样传递给系统,ntfs-3g挂载时候只能直接找UUID=XXXXXXXXXX(字面意义)。
修改好后,系统解析引导参数时候会把root=UUID=123456修正为/dev/disk/by-uuid/123456.如果是root=LABEL=XYZ ,系统会修正为 /dev/disk/by-label/XYZ
回复

使用道具 举报

发表于 2017-1-8 18:32:13 | 显示全部楼层
按楼主的教程生成lubuntu16.10的vhd启动成功,不过也有uuid找不到问题,改成/dev/sda就能启动,应该不是ntfs-3g的问题,因为进系统后用uuid可以成功mount,所以会不会是initramfs的驱动不全造成的呢?

点评

有可能是initramfs内部驱动不全。但不知道如何修正。  详情 回复 发表于 2017-1-11 14:22
回复

使用道具 举报

 楼主| 发表于 2017-1-11 14:22:20 | 显示全部楼层
2012dantes 发表于 2017-1-8 18:32
按楼主的教程生成lubuntu16.10的vhd启动成功,不过也有uuid找不到问题,改成/dev/sda就能启动,应该不是ntf ...

有可能是initramfs内部驱动不全。但不知道如何修正。
回复

使用道具 举报

发表于 2017-1-11 18:51:42 | 显示全部楼层
2011niumao 发表于 2017-1-11 14:22
有可能是initramfs内部驱动不全。但不知道如何修正。

linux会把启动参数 UUID=12345678 指向到 /dev/disk/by-uuid/12345678的快捷方式,而快捷方式指向的就是对应设备 /dev/sda 之类的。
会不会是 mount的时机早了点,by-uuid 目录的快捷方式还没生成,所以才会找不到设备呢?不知从这方面着手会不会有点思路。

点评

上传了一个修改好local文件的initrd,img 。可以用它和同版本的vmlinuz引导看看。 4.4.0-59-generic.  详情 回复 发表于 2017-1-11 22:39
谢谢你的提醒。终于找到这个问题的原因以及解决办法了。 重新发布一下ubuntu制作initramfs的方法,仅仅是增加了一个local-1604修改说明,一个local-1604文件作为样本。 放在一楼第一个链接的mydracut.zip文档内部u  详情 回复 发表于 2017-1-11 22:05
已经找到原因了。是local文件修改时候引入的一个问题。在修改local文件时候把系统一些解析引导参数的指令也跳过去了。只需要调整一个语句的位置就好了。把 if [ -z "$kloop" ]; then 从原先一开始的位置向后移动到lo  详情 回复 发表于 2017-1-11 21:58
回复

使用道具 举报

 楼主| 发表于 2017-1-11 21:58:43 | 显示全部楼层
本帖最后由 2011niumao 于 2017-1-12 19:35 编辑
2012dantes 发表于 2017-1-11 18:51
linux会把启动参数 UUID=12345678 指向到 /dev/disk/by-uuid/12345678的快捷方式,而快捷方式指向的就是 ...


已经找到原因了。是local文件修改时候引入的一个问题。在修改local文件时候把系统一些解析引导参数的指令也跳过去了。只需要调整一个语句的位置就好了。把 if [ -z "$kloop" ]; then 从原先一开始的位置向后移动到local_premount 语句后面,就可以使用root=UUID=XXXXXXXXXXXXXXXXXXx  和root=LABEL=XXX来引导了。测试通过了。以下是新的写法。仅仅是调整 了if [ -z "$kloop" ]; then位置。
local_mount_root()
{

        local_top
        local_device_setup "${ROOT}" root
        ROOT="${DEV}"

        # Get the root filesystem type if not set
        if [ -z "${ROOTFSTYPE}" ]; then
                FSTYPE=$(get_fstype "${ROOT}")
        else
                FSTYPE=${ROOTFSTYPE}
        fi

        local_premount

if [ -z "$kloop" ]; then

        if [ "${readonly}" = "y" ] && \
           [ -z "$LOOP" ]; then
                roflag=-r
        else
                roflag=-w
        fi

        # FIXME This has no error checking
        [ -n "${FSTYPE}" ] && modprobe ${FSTYPE}

        checkfs ${ROOT} root

        # FIXME This has no error checking
        # Mount root
        mount ${roflag} ${FSTYPE:+-t ${FSTYPE} }${ROOTFLAGS} ${ROOT} ${rootmnt}
        mountroot_status="$?"
        if [ "$LOOP" ]; then
                if [ "$mountroot_status" != 0 ]; then
                        if [ ${FSTYPE} = ntfs ] || [ ${FSTYPE} = vfat ]; then
                                panic "
Could not mount the partition ${ROOT}.
This could also happen if the file system is not clean because of an operating
system crash, an interrupted boot process, an improper shutdown, or unplugging
of a removable device without first unmounting or ejecting it.  To fix this,
simply reboot into Windows, let it fully start, log in, run 'chkdsk /r', then
gracefully shut down and reboot back into Windows. After this you should be
able to reboot again and resume the installation.
(filesystem = ${FSTYPE}, error code = $mountroot_status)
"
                        fi
                fi
       
                mkdir -p /host
                mount -o move ${rootmnt} /host

                while [ ! -e "/host/${LOOP#/}" ]; do
                        panic "ALERT!  /host/${LOOP#/} does not exist.  Dropping to a shell!"
                done

                # Get the loop filesystem type if not set
                if [ -z "${LOOPFSTYPE}" ]; then
                        eval $(fstype < "/host/${LOOP#/}")
                else
                        FSTYPE="${LOOPFSTYPE}"
                fi
                if [ "$FSTYPE" = "unknown" ] && [ -x /sbin/blkid ]; then
                        FSTYPE=$(/sbin/blkid -s TYPE -o value "/host/${LOOP#/}")
                        [ -z "$FSTYPE" ] && FSTYPE="unknown"
                fi

                if [ ${readonly} = y ]; then
                        roflag=-r
                else
                        roflag=-w
                fi

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

                # FIXME This has no error checking
                mount ${roflag} -o loop -t ${FSTYPE} ${LOOPFLAGS} "/host/${LOOP#/}" ${rootmnt}

                if [ -d ${rootmnt}/host ]; then
                        mount -o move /host ${rootmnt}/host
                fi
        fi

fi

        ######################################
        #                            kloop by niumao                                #
        ######################################

if [ -n "$kloop" ]; then

        ### reset the value of the root variable
        HOSTDEV="${ROOT}"
        NEWROOT="${rootmnt}"
        [ -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              
                modprobe  loop  
                kpartx -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

        if [ "${readonly}" = "y" ] ; then
                roflag="-r"
        else
                roflag="-w"
        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    ${roflag} -t "${kloopfstype}"  $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

        ######################################
        #                     kloop by niumao ended                       #
        ######################################

}
回复

使用道具 举报

 楼主| 发表于 2017-1-11 22:05:19 | 显示全部楼层

UUID失效原因

本帖最后由 2011niumao 于 2017-1-11 22:15 编辑
2012dantes 发表于 2017-1-11 18:51
linux会把启动参数 UUID=12345678 指向到 /dev/disk/by-uuid/12345678的快捷方式,而快捷方式指向的就是对应设备 /dev/sda 之类的。
    会不会是 mount的时机早了点,by-uuid 目录的快捷方式还没生成,所以才会找不到设备呢?不知从这方面着手会不会有点思路。


谢谢你的提醒。终于找到这个问题的原因以及解决办法了。
重新发布一下ubuntu制作initramfs的方法,仅仅是增加了一个local-1604修改说明,一个local-1604文件作为样本。
放在一楼第一个链接的mydracut.zip文档内部ubuntu-kloop子目录内。

UUID失效原因

原来的写法,跳过了系统对于引导参数的解析和改造,所以root参数只能原样传递给系统,ntfs-3g挂载时候只能直接找UUID=XXXXXXXXXX(字面意义)。
修改好后,系统解析引导参数时候会把root=UUID=123456修正为/dev/disk/by-uuid/123456.如果是root=LABEL=XYZ ,系统会修正为 /dev/disk/by-label/XYZ
回复

使用道具 举报

 楼主| 发表于 2017-1-11 22:39:56 | 显示全部楼层
本帖最后由 2011niumao 于 2017-1-11 22:44 编辑

重新上传了一个修改好local文件的initrd.img  vmlinuz。版本是 4.4.0-59-generic.
可从一楼第一个链接下载 vmlinuz initrd.img ,用它们引导ubuntu vhd系统,
而且引导参数可以是root=UUID=XXXXXXXXX 或者 root=LABEL=XYZ的形式。
回复

使用道具 举报

发表于 2017-1-12 19:02:21 | 显示全部楼层
感谢楼主!修改后可以用uuid方式启动lubuntuu.vhd了!
回复

使用道具 举报

发表于 2017-1-21 17:10:04 | 显示全部楼层
This seems to work!
"reboot.pro/topic/20603-linux-from-vhd-how-to/page-3#entry201757"

title UBT-small.vhd
find --set-root --ignore-floppies --ignore-cd  /ubuntu/UBT-small.vhd
uuid ()
set UUID=%?%
kernel /ubuntu/vmlinuz  root=/dev/disk/by-uuid/%UUID%  kloop=/ubuntu/UBT-small.vhd  kroot=/dev/mapper/loop0p1 vga=792
initrd /ubuntu/initrd.img
boot
回复

使用道具 举报

发表于 2017-1-21 17:10:15 | 显示全部楼层
This seems to work!
"reboot.pro/topic/20603-linux-from-vhd-how-to/page-3#entry201757"

title UBT-small.vhd
find --set-root --ignore-floppies --ignore-cd  /ubuntu/UBT-small.vhd
uuid ()
set UUID=%?%
kernel /ubuntu/vmlinuz  root=/dev/disk/by-uuid/%UUID%  kloop=/ubuntu/UBT-small.vhd  kroot=/dev/mapper/loop0p1 vga=792
initrd /ubuntu/initrd.img
boot

点评

the original local-file has a mistaken, the sentence “if [ -z "$kloop" ]; then" is placed in the front of the function local_mount_root(). It should be placed after the sentence "local_premount"  详情 回复 发表于 2017-1-22 10:42
是的。原来local文件跳过了参数解析,直接把root参数被依照字面传递给了ntfs-3g。 现在又修正了local文件,使得在挂载根分区以前先做了参数解析,直接使用也可以了。或者使用grub2  详情 回复 发表于 2017-1-22 10:19
回复

使用道具 举报

 楼主| 发表于 2017-1-22 10:19:46 | 显示全部楼层
alanyih 发表于 2017-1-21 17:10
This seems to work!
"reboot.pro/topic/20603-linux-from-vhd-how-to/page-3#entry201757"


这也是一个解决方法,多谢。

原来local文件跳过了参数解析,直接把root参数被依照字面传递给了ntfs-3g。
现在又修正了local文件,使得在挂载根分区以前先做了参数解析,直接使用
  1. title UBT-small.vhd
  2. find --set-root --ignore-floppies --ignore-cd  /ubuntu/UBT-small.vhd
  3. uuid ()
  4. set UUID=%?%
  5. kernel /ubuntu/vmlinuz  root=%UUID%  kloop=/ubuntu/UBT-small.vhd  kroot=/dev/mapper/loop0p1 vga=792
  6. initrd /ubuntu/initrd.img
  7. boot
复制代码
也可以了。或者使用grub2
  1.     menuentry " UBT-small.vhd " --class  ubuntu {
  2.             insmod gzio
  3.             insmod part_msdos
  4.             insmod part_gpt
  5.             insmod ext2
  6.             insmod ntfs
  7.             insmod probe
  8.             set vhdfile="/ubt/UBT-small.vhd"
  9.             set root=(hd0,1)
  10.             search --no-floppy -f --set=aabbcc  $vhdfile
  11.             set root=${aabbcc}
  12.             probe -u --set=ddeeff ${aabbcc}
  13.             loopback loop0 $vhdfile
  14.             linux        (loop0,1)/vmlinuz root=UUID=${ddeeff} rw  kloop=$vhdfile  kroot=/dev/mapper/loop0p1
  15.             initrd        (loop0,1)/initrd.img
  16.     }  
复制代码
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-29 12:50

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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