V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Itanium
V2EX  ›  Linux

Linux 怎么全盘备份/恢复/迁移

  •  
  •   Itanium · 2022-09-30 14:08:05 +08:00 · 4104 次点击
    这是一个创建于 566 天前的主题,其中的信息可能已经有所发展或是发生改变。
    需求大致是旧盘空间不够了,买了块新盘,都是 SSD ,同一台机器上

    efi 分区是挂到 /boot/efi 的,swap 应该不需要迁?剩下的就是普通分区了

    想问下谁有这种经验
    第 1 条附言  ·  2022-10-01 00:42:47 +08:00
    感谢大家,最后选择了 clonezilla
    29 条回复    2022-10-05 21:54:56 +08:00
    bawanag
        1
    bawanag  
       2022-09-30 14:11:30 +08:00
    同想知道
    hxy100
        2
    hxy100  
       2022-09-30 14:15:40 +08:00
    研究下 dd 命令,可以实现你所说的需求,大致使用如下的命令,可以配合其他参数:

    dd if=/dev/sda of=/dev/sdb

    ---
    man dd

    ```
    DD(1) General Commands Manual DD(1)

    NAME
    dd - 转换和拷贝文件

    摘要
    dd [--help] [--version] [if=file] [of=file] [ibs=bytes] [obs=bytes] [bs=bytes] [cbs=bytes]
    [skip=blocks] [seek=blocks] [count=blocks] [conv={ascii, ebcdic, ibm, block, unblock, lcase,
    ucase, swab, noerror, notrunc, sync}]

    描述
    当进行非强制的转换的时候,使用指定的输入和输出块大小拷贝文件 (默认是从标准输入到标准输出。)

    它每次从输入读取指定大小的一个块(默认是 512 字节)。 如果使用 bs=bytes 选项,并且没有转换,除了指
    定 sync, noerror, 或 notrunc 之外, 那么 dd 将把全部读到的数据(可以比请求读的少) 写到独立的输出块
    去。 这个输出块的长度和读到的数据 完全一样,除非指定使用 sync (同步) 转换,那样的话,数据结尾处
    将追加 NUL 字符(或空格,见下)。

    其他情况下,输入的时候每次读一个块,然后处理,并将 输出结果收集起来,最后写到指定大小的数据块中
    去。最 终的输出块可能会比指定的大小短一些。

    数字值选项(以字节或块为单位)后面可以跟一个乘数:k=1024 ,b=512 ,w=2 ,c=1 ( w 和 c 是 GNU 扩展语法。最
    好别 使用 w ,因为在 system V 中,它表示 2 ,在 4.2 BSD 中,它 表示 4 )。两个或更多的数值表达式可以通过
    “x”乘起来。 GEU fileutils 4.0 并且允许在数据块大小的叙述中使用 下列乘法后缀(
    用 bs=,cbs=,obs=):M=1048576 ,G=1073741824 , 同理可得 T ,P ,E ,Z ,Y 。D 后缀表示数值是以 十进制表
    示的:kD=1000 MD=1000000 GD=1000000000 等等。 (注意,在 ls 、df 、du 命令中,M 等标记的大小是由环境 变
    量确定的,而在 DD 中,它的值是固定的。)

    选项
    if=file
    从 file 中读而不是标准输入。

    of=file
    写到 file 里去而不是标准输出。除非指定 conv=notrunc ,否则,dd 将把 file 截为 O 字节(或由
    seek= 选项指定的大小)

    ibs=bytes
    一次读 bytes 字节。默认是 512 。

    obs=bytes
    一次写 bytes 字节。默认是 512 。

    bs=bytes
    一次读和写 bytes 字节。这将覆盖 ibs 和 obs 设定的值(并且,设定 bs 不等于同时将 ibs 和 obs
    设为同一个值,至少在 只使用 sync, noerror 或 notrunc 转换时是这样的。因为 bs 规定,每个输入
    块都应作为单独 的数据块拷贝到输出,而不把较短的块组合到一起)。

    cbs=bytes
    为 block 转换和 unblock 转换指定转换块的大小。

    skip=blocks
    在拷贝之前,跳过输入文件的前 blocks 块,每块大小为 ibs-byte 字节。

    seek=blocks
    在拷贝之前,跳过输出文件的前 blocks 块,每块大小为 obs-byte 字节。

    count=blocks
    只拷贝输入文件的前 blocks 块(每块的大小为 ibs-byte 字节),而不是全部内容,直到文件末尾。

    conv=转换"[,"转换"]..."
    将文件按 转换 参数指定的方式转换(在“,”两边没有空格)。

    转换方式包括:

    ascii 将 EBCDIC 转换成 ascii 。

    ebcdic 将 ascii 转换成 ebcdic 。

    ibm 将 ascii 转换成 alternative ebcdic 。

    block 每一行输入,无论长短,输出都是 cbs 字节,并且其中的“换行”( NEWLINE ,即 c 中的'0 )用
    空格替换。如有必要,行尾会填充空格。

    unblock
    用“换行”替换每个输入块( cbs 字节大小)末尾的空格。

    lcase 将大写字母转换成小写。

    ucase 将小写字母转换成大写。

    swab 交换每对输入字节。如果读入的字节数是奇数,最后 一个字节只是简单的复制到输出(因为没
    有能跟它交换的 字节了)( POSIX 1003.26 ,PASC 翻译 1003.2 3 号和 4 号)。

    noerror
    发生读错误时,继续进行。

    notrunc
    不截断输出文件。

    sync 用 0 填充到每个输入块的末尾,使其大小为 ibs 字节。

    GNU 标准选项
    --help 将用法信息打印到标准输出,并成功退出。

    --version
    将版本信息打印到标准输出,并成功退出。

    -- 结束选项列表。

    环境变量
    LANG, LC_ALL, LC_CTYPE 和 LC_MESSAGES 具有其通常含义。

    遵循标准
    POSIX 1003.2

    举例
    磁带机通常不能接受任意大小的数据块,当最后一个数据片 段不能充满整个块时,dd 将出现 I/O 错误。用'dd
    if=myfile of=/dev/mytape conv=sync' 就可以使全部内容存到磁带上。当然,这样做,把文件从磁 带上读回
    时回产生一个稍大些的文件,因为其尾部填充了一 些 NUL (空字符)。


    本手册页描述了 fileutils-4.0 软件包中的 dd 命令。其他版 本的 dd 会与此稍有不同。有关更正和补充可以发
    帖到中国 linux 论坛-man 手册版。报告程序中的错误,请给 fileutils-bugs2gnu.ai.wit.edu 发邮件。



    ```
    PolarBears
        3
    PolarBears  
       2022-09-30 14:25:04 +08:00   ❤️ 2
    Clonezilla
    GiantHard
        4
    GiantHard  
       2022-09-30 14:40:56 +08:00
    我之前这么搞过,是用 rsync 做得的,可以参考 https://wiki.archlinux.org/title/Rsync#Full_system_backup
    autoxbc
        5
    autoxbc  
       2022-09-30 15:04:02 +08:00
    手动分区 => 再生龙迁移分区 => 手动修改 fstab 。交换分区不需要迁移,交换文件(估计没有)需要
    JohnBull
        6
    JohnBull  
       2022-09-30 15:14:22 +08:00
    对于 MSDOS 分区的硬盘,可直接 dd ,然后启动系统调整分区大小即可
    对于 GPT 分区的硬盘,不同容量的盘直接 dd 是不行的,我们有项目需要快速部署 NUC 实机环境,我最后是用脚本创建相同的分区布局,然后 rsync 刷内容
    f165af34d4830eeb
        7
    f165af34d4830eeb  
       2022-09-30 15:23:27 +08:00
    @JohnBull #6 也不是完全不行,按分区 dd 后再用 parted 调一下各分区大小,最后根据 uuid 改一下 grub 和 fstab 配置就能用了。
    photon006
        8
    photon006  
       2022-09-30 15:55:18 +08:00
    pve 虚拟化开备份,docker 跑 syncthing 同步 zst 文件到另一台机器或 nas 。
    mrzx
        9
    mrzx  
       2022-09-30 16:16:57 +08:00
    不需要啊,用 tar 打个压缩包即可。排除掉一些文件夹,比如 /proc /tmp /dev/之类的。

    还原的时候,加载 live 盘,直接 root 权限,创建必要目录,然后解压复制即可啊。。。。

    需要这么复杂吗?需要吗?说明你们还不够了解 linux 啊
    mrzx
        10
    mrzx  
       2022-09-30 16:19:32 +08:00
    哦,忘了说,楼上有一个认说的对。
    需要考虑下硬盘引导配置文件。就是 /etc/fstab

    需要将新的 uuid 一一对应上去。用这个命令查看下目前的UUID
    ls -al /dev/disk/by-uuid
    zjhzxhz
        11
    zjhzxhz  
       2022-09-30 16:23:55 +08:00
    Clonezilla 了解一下
    taobibi
        12
    taobibi  
       2022-09-30 16:36:02 +08:00
    Clonezilla 再生龙,根据向导操作
    maxmug
        13
    maxmug  
       2022-09-30 17:23:37 +08:00
    @mrzx 类似 9 楼这样的方法我也用过,下面的文章列出了一些可能用得上的命令
    echo 'aHR0cHM6Ly9qdWVqaW4uY24vcG9zdC82OTkwNjIzMTc1OTA2MTY0NzcyCg==' | base64 -d
    Pythondr
        14
    Pythondr  
       2022-09-30 17:38:38 +08:00
    webcape233
        15
    webcape233  
       2022-09-30 18:20:31 +08:00 via iPhone
    @autoxbc 文件也不需要啊 这文件手动生成一个就是
    documentzhangx66
        16
    documentzhangx66  
       2022-09-30 18:27:12 +08:00
    1.说 dd 的都是在害人。dd 是无脑全盘读一遍,根本不管有没有数据,而且也不会去处理磁盘兼容性。

    2.再生龙是一种方法,但由于 Linux 系统的分区方式太灵活,再生龙也不是所有分区方式都支持。

    3.系统迁移的正确方式是,把 根目录 用 Btrfs 或 zfs 这种 COW 文件系统管理起来,直接快照,然后把快照发送到文件,接着新盘分区后,直接 live 光盘(相当于 WinPE )接受一下备份文件并还原即可。
    bigdoing
        17
    bigdoing  
       2022-09-30 18:47:58 +08:00 via iPhone
    都是些不懂的,就是 dd ,dd 太复杂,命令行一大堆

    cat old > new
    不然分区,文件系统 扩大一下就好了
    terencelau
        18
    terencelau  
       2022-09-30 21:18:36 +08:00
    感觉 timeshift 应该可以
    documentzhangx66
        19
    documentzhangx66  
       2022-09-30 22:18:46 +08:00
    @terencelau

    千万别,这玩意对于自定义分区就是个坑,各种报错。

    而且在 COW 系统里,卸载 timeshift 还有可能,因误删挂载点,导致数据被删全毁。因为这货居然在自己的目录里,整了个指向 root 的挂载点。很多小白没注意,弄出事故。
    westerndream
        20
    westerndream  
       2022-09-30 23:01:11 +08:00
    armbian (一种在 arm 芯片上跑的 linux 发行版)里面是这么安装系统的( U 盘 /tf 卡启动,然后安装到板载 emmc 上):
    先新建和格式化好分区,然后对于有实际内容的目录(以 /usr 为例$DIR_INSTALL 为新根目录的挂载目录),用这个拷贝文件
    tar -cf - usr | (cd $DIR_INSTALL; tar -xpf -)
    然后还要额外处理启动分区的内容和一些 fstab 之类的,可以参考下以上的流程
    mingl0280
        21
    mingl0280  
       2022-09-30 23:01:49 +08:00
    clonezilla 了解一下
    mingl0280
        22
    mingl0280  
       2022-09-30 23:02:12 +08:00   ❤️ 1
    @autoxbc clonezilla 现在可以自动修改 fstab 了
    ea3ba5c0
        23
    ea3ba5c0  
       2022-09-30 23:03:57 +08:00
    dd 可以的。
    autoxbc
        24
    autoxbc  
       2022-09-30 23:56:10 +08:00
    @webcape233 #15 手动生成也算迁移,至少文件名迁移过去了
    bao3
        25
    bao3  
       2022-10-01 02:34:04 +08:00 via iPhone
    Clonezilla ,Linux 的神器。不二之选。

    实在没得选了,你就用 dd ,gparted 等等整盘备份吧
    dianso
        26
    dianso  
       2022-10-01 11:14:54 +08:00
    netcat nc 可以备份
    workman2021
        27
    workman2021  
       2022-10-01 22:43:12 +08:00
    www.fsarchiver.org 在新机器上 mkfs.xxxx 的时候注意一下 uuid 和之前一样就行
    rsync 也可以
    linuxgo
        28
    linuxgo  
       2022-10-04 10:25:53 +08:00
    mx linux 有个功能 snapshot ,可以吧整个系统做成一个 live iso ,如果系统出现问题,可以把 iso 写到一个 u 盘上,用 u 盘启动到 live 桌面,然后直接安装就可以恢复到之前备份的系统了,都是图形界面操作,很方便
    terencelau
        29
    terencelau  
       2022-10-05 21:54:56 +08:00
    @documentzhangx66 谢谢提醒,差点就 all in timeshift 了 lol
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3434 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 11:17 · PVG 19:17 · LAX 04:17 · JFK 07:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.