搬:ubuntu系统备份还原(迁移)到另外一台电脑上

ubuntu系统备份还原(迁移)到另外一台电脑上

https://blog.csdn.net/stack_moon/article/details/80931544

主要参考如下博客:

https://blog.csdn.net/zeg635702733/article/details/53992224

https://blog.csdn.net/qq_35523593/article/details/78545530

系统:ubuntu16.04.4LTS

1.首先用U盘制作一个Ubuntu16.04.4LTS的系统启动盘。

2.备份原理就是将系统文件压缩打包,还原就是解压压缩包。

由于Linux系统所有都是文件,只需要将系统打包即可。有些文件是系统运行中所产生的文件以及临时文件,可以不用打包。第一种打包方式,直接在Linux系统下压缩打包(发现tar在打包最后会报错,不会有影响)。

在新电脑上使用Live USB,其实就是刚刚用U盘做的系统启动盘,进入使用ubuntu。进入试用Ubuntu后,先获取root权限,sudopasswd root,更改root密码后,然后切换root用户。su root。

第二种打包方式(推荐使用),使用Live USB,其实就是刚刚用U盘做的系统镜像,进入试用,跟上面操作一样,然后再进行打包。

这两种都是亲自测试过,都可以。

挂载备份的系统硬盘.可以使用fdisk -l(比如root权限)查看硬盘号,确认那个是作为还原系统的硬盘。

3.对新硬盘先进行分区,如果未对硬盘进行分区过,硬盘是不会被挂载的。可通过sudo blkid,会告诉你有一块无法识别文件类型的硬盘。把新硬盘进行分区,建议分区要跟备份的那台电脑分区一致,也可不一致。(跟第五步有关系)

备注:通过LiveUSB只进行分区,发现把后面的步骤做完,电脑会提示找不到这块硬盘,这个没找到原因,希望看完这篇博客,并尝试解决的,欢迎在下面留言。不过本人是通过彻底装完系统后,将它的所有的分区文件全部替换掉。

4.备份系统(内容来源:https://blog.csdn.net/qq_35523593/article/details/78545530

)linux秉承一切皆文件的思想,系统备份就相当于把整个/(根目录)所有文件打包压缩保存。

备份前先切换到root用户,避免权限问题,然后切换到/(根目录)。

tar -cvpzf /media/zx/KINGSTON/ubuntu_backup@`date+%Y-%m+%d`.tar.gz --exclude=/proc --exclude=/tmp --exclude=/boot--exclude=/home --exclude=/lost+found --exclude=/media --exclude=/mnt--exclude=/run /

下面解释一下上面这条命令。tar就是一个打包命令。

 打包文件放在的目录及打包文件名字。
* /media/zx/KINGSTON/ubuntu_backup@date+%Y-%m+%d.tar.gz

这里用了一个shell命令date+%Y-%m+%d用于获取当前时间,因为备份嘛,注明时间戳还是有必要的,然后.tar.gz是说明这个文件是用tar进行打包,gzip进行压缩的。所以要根据你自己情况换为你自己的备份文件目录和文件名。

参数:
-c: 新建一个备份文档
-v: 显示详细信息
-p: 保存权限,并应用到所有文件
-z: 用gzip压缩备份文档,减小空间
-f: 指定备份文件的路径
–exclude: 排除指定目录,不进行备份

Note: 注意–exclude参数,接下来谈谈那些目录没有备份,以及为什么不备份。

我的ubuntu系统,共有四个分区,分别是:/、/home、/boot、swap。

  • 非常建议系统备份的时候按照分区进行分别备份,并且也不建议安装系统的时候只给系统分一个分区。有四个分区的好处是,一般系统坏了都是/分区的问题,/home没什么关系,所以这种情况,我可以只还原/分区,其他分区完全可以不用动,系统就可以恢复,会节省很多时间。
  • 另外,为了保险起见,也可以对/home和/boot备份,但是备份频率完全没必要和/分区一样高。比如/分区每周备份一次,那/home和/boot完全可以一个月备份一次,因为这两个分区出问题的概率真的很小,而且变动也不会太频繁。
  • 请注意,如果没有把/home或者/boot目录单独分一个区,一定不要加–exclude=/home或–exclude=/boot参数!!!

/proc:一个虚拟文件系统,系统运行的每一个进程都会自动在这个目录下面创建一个进程目录。既然是系统自动创建,也就没必要备份的必要了。
/tmp:一个临时文件夹,系统的一些临时文件会放在这里。
/lost+found:系统发生错误时(比如非法关机),可以在这里找回一些丢失文件。
/media:多媒体挂载点,像u盘、移动硬盘、windons分区等都会自动挂载到这个目录下。
/mnt:临时挂载点,你可以自己挂载一些文件系统到这里。
/run:系统从启动以来产生的一些信息文件。
/home:用户家目录,存放用户个人文件和应用程序。
/boot:和系统启动相关的文件,像grub相关文件都放在这里,这个目录很重要!

我再次强调一次,/home和/boot目录我实际也是做了备份的,备份命令和上面差不多,当然你也可以排除一些目录不进行备份,像我/home下面的虚拟机文件,太占空间了。

tar -cvpzf /media/zx/KINGSTON/ubuntu_home_backup@`date+%Y-%m-%d`.tar.gz /home

tar -cvpzf /media/zx/KINGSTON/ubuntu_boot_backup@`date+%Y-%m-%d`.tar.gz /boot

 

5.替换备份系统配置文件,以及修改启动文件中的UUID:

这一步很重要。如果你的boot,是单独分区,那么你要注意了!!!,你通过live USB,在一台安装好的ubuntu电脑上,进入试用,你看/boot下里面是没有文件的。如果是单独分区的,你通过sudo blkid,并且记住/ /boot /home swap的uuid,并且可以在/etc下的fstab文件里面找到这四个uuid值,文件的信息可自行百度,不在此说明。如果/boot没有单独挂载,那么fstab里面没有/boot的uuid信息。可以看到找到boot的uuid,他是单独挂载,通过uuid值找到挂载点进入单独挂载的boot下,原来启动文件在单独挂载的boot文件目录下。

 

在新电脑上通过liveUSB,进入试用,将之前备份的压缩包通过U盘拷贝过来,也可直接解压。开始解压

tar -xvpzf /media/zx/KINGSTON/[email protected]

10da9d77-10c2-4978-9065-ed8194f23545(新硬盘的/挂载的uuid值)

 

mkdir proc tmp lost+found media mnt run

这个 /不是live USB的/ ,而是上面新硬盘的/,他是有uuid的,是单独挂载的。

 

接下来就是改配置文件了,把新硬盘的boot下面的grub目录下的grup.cfg里面的uuid替换掉,这里面很重要。如果没有把boot单独分区那么你只要将里面的uuid全部改成新硬盘的/的uuid,(考虑启动过程没有其他挂载的情况)。如果是单独分区的话,注意这个文件下还有boot的uuid的值,如果还有其他挂载,还有多个uuid值。所以更改uuid值要区分/、boot、其他挂载的uuid值。一般来说,这个文件里只有出现一个或者两个关于uuid的值(boot是否单独分区)。下面这句话改为/,boot的uuid值。

 

search --no-floppy --fs-uuid --set=root18c7c7d4-062a-4fde-86bc-c14c3d15199b(区别/和/boot的值,不要给错,不然会开不了机的)

 

grub.cfg文件内容:

#

# DO NOT EDIT THIS FILE

#

# It is automatically generated by grub-mkconfig usingtemplates

# from /etc/grub.d and settings from /etc/default/grub

#

 

### BEGIN /etc/grub.d/00_header ###

if [ -s $prefix/grubenv ]; then

  sethave_grubenv=true

  load_env

fi

if [ "${next_entry}" ] ; then

   setdefault="${next_entry}"

   set next_entry=

   save_envnext_entry

   setboot_once=true

else

   setdefault="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

  setsaved_entry="${prev_saved_entry}"

  save_envsaved_entry

  setprev_saved_entry=

  save_envprev_saved_entry

  setboot_once=true

fi

 

function savedefault {

  if [ -z"${boot_once}" ]; then

   saved_entry="${chosen}"

    save_envsaved_entry

  fi

}

function recordfail {

  set recordfail=1

  if [ -n"${have_grubenv}" ]; then if [ -z "${boot_once}" ]; thensave_env recordfail; fi; fi

}

function load_video {

  if [x$feature_all_video_module = xy ]; then

    insmodall_video

  else

    insmod efi_gop

    insmod efi_uga

    insmodieee1275_fb

    insmod vbe

    insmod vga

    insmodvideo_bochs

    insmodvideo_cirrus

  fi

}

 

if [ x$feature_default_font_path = xy ] ; then

   font=unicode

else

insmod part_msdos

insmod ext2

set root='hd0,msdos7'

if [ x$feature_platform_search_hint = xy ]; then

  search--no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos7 --hint-efi=hd0,msdos7--hint-baremetal=ahci0,msdos7  c7f7a223-c4aa-47f7-8f87-70e5c07de8c1

else

  search--no-floppy --fs-uuid --set=root c7f7a223-c4aa-47f7-8f87-70e5c07de8c1

fi

   font="/share/grub/unicode.pf2"

fi

 

if loadfont $font ; then

  set gfxmode=auto

  load_video

  insmod gfxterm

  setlocale_dir=$prefix/locale

  set lang=zh_CN

  insmod gettext

fi

terminal_output gfxterm

if [ "${recordfail}" = 1 ] ; then

  set timeout=30

else

  if [x$feature_timeout_style = xy ] ; then

    settimeout_style=hidden

    set timeout=0

  # Fallbackhidden-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

if background_color 44,0,30,0; then

  clear

fi

### END /etc/grub.d/05_debian_theme ###

 

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

function gfxmode {

        setgfxpayload="${1}"

        if ["${1}" = "keep" ]; then

               setvt_handoff=vt.handoff=7

        else

               setvt_handoff=

        fi

}

if [ "${recordfail}" != 1 ]; then

  if [ -e${prefix}/gfxblacklist.txt ]; then

    if hwmatch${prefix}/gfxblacklist.txt 3; then

      if [ ${match}= 0 ]; then

        setlinux_gfx_mode=keep

      else

        setlinux_gfx_mode=text

      fi

    else

      setlinux_gfx_mode=text

    fi

  else

    setlinux_gfx_mode=keep

  fi

else

  setlinux_gfx_mode=text

fi

export linux_gfx_mode

menuentry 'Ubuntu' --class ubuntu --class gnu-linux--class gnu --class os $menuentry_id_option 'gnulinux-simple-e763fea9-65c8-4985-956a-e835125e2ed0'{

        recordfail

        load_video

        gfxmode$linux_gfx_mode

        insmod gzio

        insmodpart_msdos

        insmod ext2

        setroot='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  18c7c7d4-062a-4fde-86bc-c14c3d15199b

        else

          search --no-floppy --fs-uuid --set=root 18c7c7d4-062a-4fde-86bc-c14c3d15199b

        fi

        linux   /vmlinuz-4.4.0-31-generic root=UUID=e763fea9-65c8-4985-956a-e835125e2ed0ro find_preseed=/preseed.cfg auto noprompt priority=critical locale=en_US quiet

        initrd  /initrd.img-4.4.0-31-generic

}

submenu 'Ubuntu 高级选项' $menuentry_id_option 'gnulinux-advanced-e763fea9-65c8-4985-956a-e835125e2ed0' {

        menuentry 'Ubuntu,Linux 4.4.0-31-generic' --class ubuntu --class gnu-linux--class gnu --class os $menuentry_id_option'gnulinux-4.4.0-31-generic-advanced-e763fea9-65c8-4985-956a-e835125e2ed0' {

               recordfail

               load_video

               gfxmode$linux_gfx_mode

               insmodgzio

               insmodpart_msdos

               insmodext2

               setroot='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  18c7c7d4-062a-4fde-86bc-c14c3d15199b

               else

                 search --no-floppy --fs-uuid --set=root 18c7c7d4-062a-4fde-86bc-c14c3d15199b

               fi

               echo    '载入 Linux 4.4.0-31-generic ...'

               linux   /vmlinuz-4.4.0-31-generic root=UUID=e763fea9-65c8-4985-956a-e835125e2ed0ro find_preseed=/preseed.cfg auto noprompt priority=critical locale=en_US quiet

               echo    '载入初始化内存盘...'

               initrd  /initrd.img-4.4.0-31-generic

        }

        menuentry'Ubuntu, with Linux 4.4.0-31-generic (recovery mode)' --class ubuntu --classgnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-31-generic-recovery-e763fea9-65c8-4985-956a-e835125e2ed0'{

               recordfail

               load_video

               insmodgzio

               insmodpart_msdos

               insmodext2

               setroot='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  18c7c7d4-062a-4fde-86bc-c14c3d15199b

               else

                 search --no-floppy --fs-uuid --set=root 18c7c7d4-062a-4fde-86bc-c14c3d15199b

               fi

               echo    '载入 Linux 4.4.0-31-generic ...'

               linux   /vmlinuz-4.4.0-31-generic root=UUID=e763fea9-65c8-4985-956a-e835125e2ed0ro recovery nomodeset find_preseed=/preseed.cfg auto noprompt priority=criticallocale=en_US

               echo    '载入初始化内存盘...'

               initrd  /initrd.img-4.4.0-31-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/20_memtest86+ ###

menuentry 'Memory test (memtest86+)' {

        insmodpart_msdos

        insmod ext2

        setroot='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  18c7c7d4-062a-4fde-86bc-c14c3d15199b

        else

          search --no-floppy --fs-uuid --set=root 18c7c7d4-062a-4fde-86bc-c14c3d15199b

        fi

        knetbsd /memtest86+.elf

}

menuentry 'Memory test (memtest86+, serial console115200)' {

        insmodpart_msdos

        insmod ext2

        setroot='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  18c7c7d4-062a-4fde-86bc-c14c3d15199b

        else

          search --no-floppy --fs-uuid --set=root 18c7c7d4-062a-4fde-86bc-c14c3d15199b

        fi

        linux16 /memtest86+.bin console=ttyS0,115200n8

}

### END /etc/grub.d/20_memtest86+ ###

 

### BEGIN /etc/grub.d/30_os-prober ###

### 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 menuentries.  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 ###

 

 

 

 

 

红色为/usr的uuid值,蓝色为/的uuid值,黄色为boot的uuid值。

 

提醒:如果对grub.cfg这个文件不了解,建议对着备份系统的grub.cfg文件修改,此过程很重要!!!!!!!!!!!!!!

 

接下来改掉新硬盘的/etc/fstab下面的/,/boot,/home,swap,的uuid值(新硬盘的四个单独挂载uiid值)。

 

/dev/sda1:UUID="22dc6da0-1ec0-4634-8691-cc83af2aa8f3" TYPE="swap"

/dev/sda2:UUID="e763fea9-65c8-4985-956a-e835125e2ed0" TYPE="ext4"

/dev/sda5:UUID="18c7c7d4-062a-4fde-86bc-c14c3d15199b" TYPE="ext4"

/dev/sda6:UUID="7165cd11-fb03-422c-8fd5-1215d96b1806" TYPE="ext4"

/dev/sda7:UUID="c7f7a223-c4aa-47f7-8f87-70e5c07de8c1" TYPE="ext4"

还有一个分区是/usr的(/dev/sda7:UUID="c7f7a223-c4aa-47f7-8f87-70e5c07de8c1" TYPE="ext4")。

 

到了这一步系统是迁移完了,发现桌面不能启动。其实有没有桌面,无所谓。当时比较纠结这个问题,后来经同事的提醒,原来自己只是在/home下用户目录,并没有在用户目录下创建跟桌面有关的文件夹,后来跟备份系统用户下的创建一样的文件夹,熟悉的桌面就回来了。

现在一切迁移完成。关闭电脑,拔掉U盘,重启电脑!

网上还有一种方法就是通过remastersys打包成镜像文件安装,具体安装方式请参考这篇博客:https://blog.csdn.net/xiaqunfeng123/article/details/54287517,这也是一种不错的方式。有局限性:大于4G无法打包,显卡驱动不能打包(原因:http://klikit.pbworks.com/w/page/7315114/Remastersys%20-%20Limitations%20of%20remastering)。

 

总结:

Tar打包方式没有文件权限及其大小局限性,就是耗时间。
这两种方法都是可以的,都是测试过,可以根据自己的具体情况选取。

你可能感兴趣的:(linux)