使用 dd 克隆后 Ubuntu 分区无法启动

使用 dd 克隆后 Ubuntu 分区无法启动

我有一台 Ubuntu 14.0.4 服务器。目标是让 kickstart 并排安装 2 个 Ubuntu 安装,实现双启动。

Ubuntu 在 上安装成功sdaX。我曾经dd将其克隆到sdaY。我已更改 UUID,fstab甚至可以启动sdaX并查看 的内容sdaY。但是,当我尝试启动时,sdaY出现了/sbin/init No such file or directory内核恐慌。

我已经编辑了 grub 以确保它正在查看sdaY

有人能想到我遗漏了什么来使该分区可启动吗?如果失败了,有没有办法使用命令行修复 Ubuntu 安装。

笔记:两者fdisk -l sda1都说sda5未找到分区表。

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    13672447     6835200   83  Linux
/dev/sda2        13674494    41940991    14133249    5  Extended
/dev/sda5        13674496    27344895     6835200   83  Linux
/dev/sda6        27346944    29298687      975872   83  Linux
/dev/sda7        29300736    31252479      975872   83  Linux
/dev/sda8        31254528    33206271      975872   82  Linux swap / Solaris
/dev/sda9        33208320    41940991     4366336   83  Linux

Disk /dev/sda1: 6999 MB, 6999244800 bytes
255 heads, 63 sectors/track, 850 cylinders, total 13670400 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000 Disk /dev/sda1 doesn't contain a valid partition table

Disk /dev/sda5: 6999 MB, 6999244800 bytes
255 heads, 63 sectors/track, 850 cylinders, total 13670400 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000Disk /dev/sda5 doesn't contain a valid partition table

/dev/sda1: LABEL="xxx" UUID="ed2dff21-3aa4-43a1-b0fc-6a56b4bc1c35" TYPE="ext4"

/dev/sda5: LABEL="yyy" UUID="9f212aba-a7da-4137-a311-e517e11fb062" TYPE="ext4"

    #
    # DO NOT EDIT THIS FILE
    #
    # It is automatically generated by grub-mkconfig using templates
    # from /etc/grub.d and settings from /etc/default/grub
    #

    ### BEGIN /etc/grub.d/00_header ###
    if [ -s $prefix/grubenv ]; then
      set have_grubenv=true
      load_env
    fi
    if [ "${next_entry}" ] ; then
       set default="${next_entry}"
       set next_entry=
       save_env next_entry
       set boot_once=true
    else
       set default="0"
    fi

    if [ x"${feature_menuentry_id}" = xy ]; then
      menuentry_id_option="--id"
    else
      menuentry_id_option=""
    fi

    export menuentry_id_option

    if [ "${prev_saved_entry}" ]; then
      set saved_entry="${prev_saved_entry}"
      save_env saved_entry
      set prev_saved_entry=
      save_env prev_saved_entry
      set boot_once=true
    fi

    function savedefault {
      if [ -z "${boot_once}" ]; then
        saved_entry="${chosen}"
        save_env saved_entry
      fi
    }
    function recordfail {
      set recordfail=1
      if [ -n "${have_grubenv}" ]; then if [ -z "${boot_once}" ]; then save_env recordfail; fi; fi
    }
    function load_video {
      if [ x$feature_all_video_module = xy ]; then
        insmod all_video
      else
        insmod efi_gop
        insmod efi_uga
        insmod ieee1275_fb
        insmod vbe
        insmod vga
        insmod video_bochs
        insmod video_cirrus
      fi
    }

    if [ x$feature_default_font_path = xy ] ; then
       font=unicode
    else
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  ed2dff21-3aa4-43a1-b0fc-6a56b4bc1c35
    else
      search --no-floppy --fs-uuid --set=root ed2dff21-3aa4-43a1-b0fc-6a56b4bc1c35
    fi
        font="/usr/share/grub/unicode.pf2"
    fi

    if loadfont $font ; then
      set gfxmode=auto
      load_video
      insmod gfxterm
      set locale_dir=$prefix/locale
      set lang=en_IE
      insmod gettext
    fi
    terminal_output gfxterm
    if [ "${recordfail}" = 1 ] ; then
      set timeout=30
    else
      if [ x$feature_timeout_style = xy ] ; then
        set timeout_style=hidden
        set timeout=0
      # Fallback hidden-timeout code in case the timeout_style feature is
      # unavailable.
      elif sleep --interruptible 0 ; then
        set timeout=0
      fi
    fi
    ### END /etc/grub.d/00_header ###

    ### BEGIN /etc/grub.d/05_debian_theme ###
    set menu_color_normal=white/black
    set menu_color_highlight=black/light-gray
    ### END /etc/grub.d/05_debian_theme ###

    ### BEGIN /etc/grub.d/10_linux ###
    function gfxmode {
        set gfxpayload="${1}"
        if [ "${1}" = "keep" ]; then
            set vt_handoff=vt.handoff=7
        else
            set vt_handoff=
        fi
    }
    if [ "${recordfail}" != 1 ]; then
      if [ -e ${prefix}/gfxblacklist.txt ]; then
        if hwmatch ${prefix}/gfxblacklist.txt 3; then
          if [ ${match} = 0 ]; then
            set linux_gfx_mode=keep
          else
            set linux_gfx_mode=text
          fi
        else
          set linux_gfx_mode=text
        fi
      else
        set linux_gfx_mode=keep
      fi
    else
      set linux_gfx_mode=text
    fi
    export linux_gfx_mode
    menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-ed2dff21-3aa4-43a1-b0fc-6a56b4bc1c35' {
        recordfail
        load_video
        gfxmode $linux_gfx_mode
        insmod gzio
        insmod part_msdos
        insmod ext2
        set root='hd0,msdos1'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  ed2dff21-3aa4-43a1-b0fc-6a56b4bc1c35
        else
          search --no-floppy --fs-uuid --set=root ed2dff21-3aa4-43a1-b0fc-6a56b4bc1c35
        fi
        linux   /boot/vmlinuz-4.2.0-27-generic root=UUID=ed2dff21-3aa4-43a1-b0fc-6a56b4bc1c35 ro  quiet splash $vt_handoff
        initrd  /boot/initrd.img-4.2.0-27-generic
    }
    submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-ed2dff21-3aa4-43a1-b0fc-6a56b4bc1c35' {
        menuentry 'Ubuntu, with Linux 4.2.0-27-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.2.0-27-generic-advanced-ed2dff21-3aa4-43a1-b0fc-6a56b4bc1c35' {
            recordfail
            load_video
            gfxmode $linux_gfx_mode
            insmod gzio
            insmod part_msdos
            insmod ext2
            set root='hd0,msdos1'
            if [ x$feature_platform_search_hint = xy ]; then
              search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  ed2dff21-3aa4-43a1-b0fc-6a56b4bc1c35
            else
              search --no-floppy --fs-uuid --set=root ed2dff21-3aa4-43a1-b0fc-6a56b4bc1c35
            fi
            echo    'Loading Linux 4.2.0-27-generic ...'
            linux   /boot/vmlinuz-4.2.0-27-generic root=UUID=ed2dff21-3aa4-43a1-b0fc-6a56b4bc1c35 ro  quiet splash $vt_handoff
            echo    'Loading initial ramdisk ...'
            initrd  /boot/initrd.img-4.2.0-27-generic
        }
        menuentry 'Ubuntu, with Linux 4.2.0-27-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.2.0-27-generic-recovery-ed2dff21-3aa4-43a1-b0fc-6a56b4bc1c35' {
            recordfail
            load_video
            insmod gzio
            insmod part_msdos
            insmod ext2
            set root='hd0,msdos1'
            if [ x$feature_platform_search_hint = xy ]; then
              search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  ed2dff21-3aa4-43a1-b0fc-6a56b4bc1c35
            else
              search --no-floppy --fs-uuid --set=root ed2dff21-3aa4-43a1-b0fc-6a56b4bc1c35
            fi
            echo    'Loading Linux 4.2.0-27-generic ...'
            linux   /boot/vmlinuz-4.2.0-27-generic root=UUID=ed2dff21-3aa4-43a1-b0fc-6a56b4bc1c35 ro recovery nomodeset 
            echo    'Loading initial ramdisk ...'
            initrd  /boot/initrd.img-4.2.0-27-generic
        }
    }

    ### END /etc/grub.d/10_linux ###

    ### BEGIN /etc/grub.d/20_linux_xen ###

    ### END /etc/grub.d/20_linux_xen ###

    ### BEGIN /etc/grub.d/30_os-prober ###
    menuentry 'Ubuntu 14.04.4 LTS (14.04) (on /dev/sda5)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-9f212aba-a7da-4137-a311-e517e11fb062' {
        insmod part_msdos
        insmod ext2
        set root='hd0,msdos5'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos5 --hint-efi=hd0,msdos5 --hint-baremetal=ahci0,msdos5  9f212aba-a7da-4137-a311-e517e11fb062
        else
          search --no-floppy --fs-uuid --set=root 9f212aba-a7da-4137-a311-e517e11fb062
        fi
        linux /boot/vmlinuz-4.2.0-27-generic root=UUID=9f212aba-a7da-4137-a311-e517e11fb062 ro quiet splash $vt_handoff
        initrd /boot/initrd.img-4.2.0-27-generic
    }
    submenu 'Advanced options for Ubuntu 14.04.4 LTS (14.04) (on /dev/sda5)' $menuentry_id_option 'osprober-gnulinux-advanced-9f212aba-a7da-4137-a311-e517e11fb062' {
        menuentry 'Ubuntu (on /dev/sda5)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.2.0-27-generic--9f212aba-a7da-4137-a311-e517e11fb062' {
            insmod part_msdos
            insmod ext2
            set root='hd0,msdos5'
            if [ x$feature_platform_search_hint = xy ]; then
              search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos5 --hint-efi=hd0,msdos5 --hint-baremetal=ahci0,msdos5  9f212aba-a7da-4137-a311-e517e11fb062
            else
              search --no-floppy --fs-uuid --set=root 9f212aba-a7da-4137-a311-e517e11fb062
            fi
            linux /boot/vmlinuz-4.2.0-27-generic root=UUID=9f212aba-a7da-4137-a311-e517e11fb062 ro quiet splash $vt_handoff
            initrd /boot/initrd.img-4.2.0-27-generic
        }
        menuentry 'Ubuntu, with Linux 4.2.0-27-generic (on /dev/sda5)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.2.0-27-generic--9f212aba-a7da-4137-a311-e517e11fb062' {
            insmod part_msdos
            insmod ext2
            set root='hd0,msdos5'
            if [ x$feature_platform_search_hint = xy ]; then
              search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos5 --hint-efi=hd0,msdos5 --hint-baremetal=ahci0,msdos5  9f212aba-a7da-4137-a311-e517e11fb062
            else
              search --no-floppy --fs-uuid --set=root 9f212aba-a7da-4137-a311-e517e11fb062
            fi
            linux /boot/vmlinuz-4.2.0-27-generic root=UUID=9f212aba-a7da-4137-a311-e517e11fb062 ro quiet splash $vt_handoff
            initrd /boot/initrd.img-4.2.0-27-generic
        }
        menuentry 'Ubuntu, with Linux 4.2.0-27-generic (recovery mode) (on /dev/sda5)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.2.0-27-generic-root=UUID=9f212aba-a7da-4137-a311-e517e11fb062 ro recovery nomodeset-9f212aba-a7da-4137-a311-e517e11fb062' {
            insmod part_msdos
            insmod ext2
            set root='hd0,msdos5'
            if [ x$feature_platform_search_hint = xy ]; then
              search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos5 --hint-efi=hd0,msdos5 --hint-baremetal=ahci0,msdos5  9f212aba-a7da-4137-a311-e517e11fb062
            else
              search --no-floppy --fs-uuid --set=root 9f212aba-a7da-4137-a311-e517e11fb062
            fi
            linux /boot/vmlinuz-4.2.0-27-generic root=UUID=9f212aba-a7da-4137-a311-e517e11fb062 ro recovery nomodeset
            initrd /boot/initrd.img-4.2.0-27-generic
        }
    }

    set timeout_style=menu
    if [ "${timeout}" = 0 ]; then
      set timeout=10
    fi
    ### END /etc/grub.d/30_os-prober ###

    ### BEGIN /etc/grub.d/30_uefi-firmware ###
    ### END /etc/grub.d/30_uefi-firmware ###

    ### BEGIN /etc/grub.d/40_custom ###
    # This file provides an easy way to add custom menu entries.  Simply type the
    # menu entries you want to add after this comment.  Be careful not to change
    # the 'exec tail' line above.
    ### END /etc/grub.d/40_custom ###

    ### BEGIN /etc/grub.d/41_custom ###
    if [ -f  ${config_directory}/custom.cfg ]; then
      source ${config_directory}/custom.cfg
    elif [ -z "${config_directory}" -a -f  $prefix/custom.cfg ]; then
      source $prefix/custom.cfg;
    fi
    ### END /etc/grub.d/41_custom ###

答案1

在您进行更改之后,您不再遇到问题GRUB,而只是一个简单的/etc/fstab问题:克隆之后,您的在和fstab上将相同,因此您需要编辑 上的版本并让其指向根文件系统的新 UUID。/dev/sda1/dev/sda5/dev/sda5

答案2

以下是关于该主题的社区维基:https://help.ubuntu.com/community/MovingLinuxPartition

步骤太多,无法在此全部列出,并且可能会进行更新,因此没有必要在此维护相同的步骤,因此仅提供链接。

编辑:就我的情况而言(将原始分区克隆到同一硬盘上的/dev/sda1新的/更大的分区),我已设法大大缩短了这个列表,因此步骤如下:/dev/sda4

  1. 当然,首先要备份所有重要的东西,这是不言而喻的

  2. 在仍然运行原始 Linux 的同时,将原始分区复制到新的/更大的分区,然后将其标记为可启动

dd if=/dev/sda1 of=/dev/sda4 bs=1M

  1. 为新分区生成一个新的 UUID(并将其复制到剪贴板中,稍后您将需要它):

tune2fs -U random /dev/sda4

  1. 挂载新分区以便能够访问其中的文件:

mkdir /mnt/new && mount /dev/sda4 /mnt/new

  1. 更新etc/fstab新分区上的文件并更改根分区的 UUID(使用步骤 2 中的 UUID):

nano /mnt/new/etc/fstab或者gedit /mnt/new/etc/fstab

  1. 运行update-grub以检测/配置您的新分区/boot/grub/grub.cfg(新分区可能menuitem会添加到 grub.cfg 文件末尾附近的某个位置)

  2. 编辑/boot/grub/grub.cfg文件并找到上一步添加到文件的新菜单项,并确保更新如下行:

linux /boot/vmlinuz-X.X.X-XX-generic root=UUID=<here we need to type the new UUID from step 2> ...

  1. /boot/grub/grub.cfg从原始分区复制到新分区(在步骤 3 中挂载的分区),覆盖先前的文件:

cp /boot/grub/grub.cfg /mnt/new/boot/grub/grub.cfg

现在您应该可以重新启动了。在 GRUB 屏幕上,选择新分区的新添加菜单项。在启动过程中,将读取原始分区 (/dev/sda1) 中的 /boot/grub/grub.cfg,但它会将您引导到新分区 (/dev/sda4)。启动后,您可以运行grub-install /dev/sda以更新 /dev/sda 上的 MBR,从此时起,您可以停止使用原始分区。

相关内容