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

2023-05-16

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

主要参考如下博客:

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/ubuntu_boot_backup@2018-6-30.tar.gz-C

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


如有不懂,或者有错误欢迎指出来。本人邮箱:972839018@qq.com


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ubuntu系统备份还原(迁移)到另外一台电脑上 的相关文章

随机推荐

  • Vue 模板

    原文 在Vue中 xff0c Vue模板对应的就是Vue中的View xff08 视图 xff09 部分 xff0c 也是Vue重中之一 xff0c 而在Vue中要了解Vue模板我们就需要从两个方面来着手 xff0c 其一是Vue的模板语法
  • Ubuntu:系统分区

    在系统分区之前 先进行磁盘分区 这里针对的是window10系统下安装ubuntu双系统 需要在window10下进行磁盘分区来安装ubuntu系统 一 磁盘分区 win10系统下 右击此电脑 xff0c 点击管理就进入磁盘管理 这时候可以
  • Mac 安装node.js

    Mac系统安装Node js xff0c 下载地址 如上图安装路径 xff1a This package will install Node js v16 19 1 to usr local bin node span class toke
  • MySQL 常用函数(二)

    ABS函数 xff1a 求绝对值 绝对值函数 ABS x 返回 x 的绝对值 正数的绝对值是其本身 xff0c 负数的绝对值为其相反数 xff0c 0 的绝对值是 0 span class token keyword SELECT span
  • MyBatis Mapper常用动态SQL之foreach 、if、choose、where、when

    if语句 lt if gt 判断语句 xff0c 用于单条件分支条件判断 使用 lt if gt 元素对参数username和jobs进行非空判断 xff0c 并动态组装SQL xff1a span class token keyword
  • Java 查看官方Java API文档

    话不多说 xff0c 直接上方法 打开官网址 xff1a http www oracle com technetwork cn java javase downloads index html 方式一 在线浏览 点击Java 文档 xff1
  • iOS-微信分享成功回调问题

    本人用ShareSDK做分享和第三方登录 xff0c 登录先不讲 xff0c 本节只做分享成功或失败后回调问题 相信好多人会有这个疑惑就是在微信分享成功后没有成功后的方法回调 xff0c 我在ShareSDK论坛也发表过帖子问过 xff0c
  • iOS-常见三种加密(MD5、非对称加密,对称加密)

    任何应用的开发中安全都是重中之重 xff0c 在信息交互异常活跃的现在 xff0c 信息加密技术显得尤为重要 在app应用开发中 xff0c 我们需要对应用中的多项数据进行加密处理 xff0c 从而来保证应用上线后的安全性 xff0c 给用
  • iOS-开辟子线程(NSThread、NSOperationQueue、GCD)

    本节主要总结一些开辟子线程的常用的几种方法 一 通过NSThread类开辟子线程 1 NSThread手动开启子线程 span class hljs comment 创建线程对象 span span class hljs built in
  • Mac 安装 IntelliJ IDEA 以及激活方法

    之前一直在苹果移动端开发 xff0c 这里想了解下Java后台的开发 xff0c 以至于更好的配合后台工作 xff0c 下面说下破解版的安装过程 xff08 Mac xff09 第一步 xff1a 下载Java开发工具 这里我们选择比较好的
  • Mac IntelliJ IDEA连接和操作MySQL数据库

    想要IntelliJ IDEA后台开发 xff0c 数据库的连接时必不可少的 xff0c 这里我们选择开源的 xff0c 同时也是使用人数比较多的一种数据库MySQL 第一步 xff1a MySQL的下载安装 到MySQL官网下载 xff0
  • GStreamer-CRITICAL **: gst_element_make_from_uri: assertion `gst_uri_is_valid (uri)' failed

    在Qt中 xff0c 使用phonon播放视频的时候 xff0c 出现了GStreamer CRITICAL gst element make from uri assertion 96 gst uri is valid uri 39 fa
  • IDEA导入JDBC驱动的jar包

    JDBC的全称是Java Database Connectivity xff0c 意思就是Java数据库链接 xff0c 是一套面向对象的应用程序接口 xff0c 指定了统一的访问各种类型数据库的标准接口 JDBC是一种底层的API xff
  • IDEA-自带Database中table进行增删改查和筛选数据

    显式的数据库有人喜欢用Navicat Premium xff0c 在里面对数据进行各种筛选和增删改查操作 xff0c 用起来很方便 这里我们说下IDEA内部自带的显式的数据库 这里我已经建好数据库和表 xff0c 表内数据我也添加了若干条
  • Flutter - Android Studio开发Flutter以及iOS真机测试

    上一节已经配置好了iOS和安卓的环境 xff0c 下面我们用Android Studio开发Flutter xff0c 当然你也可以用VSCode和ItelliJ IDEA来开发 还没配置的同学请看上一片文章 一 创建项目 接着上一节操作
  • Oracle 中ORA-28000: the account is locked解决办法

    在没有navicat xff0c 只有cmd应用程序的条件下 xff0c 在密码输入多次都出现 the account is locked用户账号被锁的问题 xff0c 请看这里 xff1a 首先 xff0c 出现ORA 28000 the
  • Linux 虚拟机设置共享文件夹不显示问题解决办法

    安装完VMware Tools后 xff0c 不要点重新启动客户机 xff0c 需要先关闭客户机 xff0c 然后再启动客户机就可以看到共享的文件
  • ROS话题通信c++和python实现

    机器人是一种高度复杂的系统性实现 xff0c 在机器人上可能集成各种传感器 雷达 摄像头 GPS 以及运动控制实现 xff0c 为了解耦合 xff0c 在ROS中每一个功能点都是一个单独的进程 xff0c 每一个进程都是独立运行的 更确切的
  • Go微服务架构实战-中篇 1. k8s架构介绍

    Go微服务架构实战 公粽号 xff1a 堆栈future 本系列文章主要是针对云原生领域微服务架构的实战 xff0c 包括网关 xff0c k8s xff0c etcd以及grpc等相关技术的应用 xff0c 同时也会把服务发现与注册 xf
  • ubuntu系统备份还原(迁移)到另外一台电脑上

    ubuntu系统备份还原 迁移 到另外一台电脑上 主要参考如下博客 xff1a https blog csdn net zeg635702733 article details 53992224 https blog csdn net qq