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

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

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

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

    想问下谁有这种经验
    第 1 条附言  ·  68 天前
    感谢大家,最后选择了 clonezilla
    29 条回复    2022-10-05 21:54:56 +08:00
    bawanag
        1
    bawanag  
       68 天前
    同想知道
    hxy100
        2
    hxy100  
       68 天前
    研究下 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  
       68 天前   ❤️ 2
    Clonezilla
    GiantHard
        4
    GiantHard  
       68 天前
    我之前这么搞过,是用 rsync 做得的,可以参考 https://wiki.archlinux.org/title/Rsync#Full_system_backup
    autoxbc
        5
    autoxbc  
       68 天前
    手动分区 => 再生龙迁移分区 => 手动修改 fstab 。交换分区不需要迁移,交换文件(估计没有)需要
    JohnBull
        6
    JohnBull  
       68 天前
    对于 MSDOS 分区的硬盘,可直接 dd ,然后启动系统调整分区大小即可
    对于 GPT 分区的硬盘,不同容量的盘直接 dd 是不行的,我们有项目需要快速部署 NUC 实机环境,我最后是用脚本创建相同的分区布局,然后 rsync 刷内容
    f165af34d4830eeb
        7
    f165af34d4830eeb  
       68 天前
    @JohnBull #6 也不是完全不行,按分区 dd 后再用 parted 调一下各分区大小,最后根据 uuid 改一下 grub 和 fstab 配置就能用了。
    photon006
        8
    photon006  
       68 天前
    pve 虚拟化开备份,docker 跑 syncthing 同步 zst 文件到另一台机器或 nas 。
    mrzx
        9
    mrzx  
       68 天前
    不需要啊,用 tar 打个压缩包即可。排除掉一些文件夹,比如 /proc /tmp /dev/之类的。

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

    需要这么复杂吗?需要吗?说明你们还不够了解 linux 啊
    mrzx
        10
    mrzx  
       68 天前
    哦,忘了说,楼上有一个认说的对。
    需要考虑下硬盘引导配置文件。就是 /etc/fstab

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

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

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

    cat old > new
    不然分区,文件系统 扩大一下就好了
    terencelau
        18
    terencelau  
       68 天前
    感觉 timeshift 应该可以
    documentzhangx66
        19
    documentzhangx66  
       68 天前
    @terencelau

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

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

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