AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 708915
Accepted
Cruise5
Cruise5
Asked: 2022-07-07 18:47:26 +0800 CST2022-07-07 18:47:26 +0800 CST 2022-07-07 18:47:26 +0800 CST

将正在运行的文件系统克隆到图像文件

  • 772

如何将正在运行的 Linux 文件系统 (Debian 10) 克隆到.img文件中?我想将其闪存到另一个 SSD 并希望新系统运行完全相同。Clonezilla 对我不起作用。新机器硬件将完全相同。

linux filesystems
  • 5 5 个回答
  • 193 Views

5 个回答

  • Voted
  1. Best Answer
    tansy
    2022-07-13T12:24:18+08:002022-07-13T12:24:18+08:00

    您可以使用 dd 或 ddrescue 甚至 cat 将整个块设备复制为映像(假设目标是 /dev/sdb)

    $ dd if=/dev/sda of=/mnt/master.img
    (...)
    $ dd if=/mnt/master.img of=/dev/sdb
    

    它应该可以工作,因为您将拥有整个分区表引导扇区,并且文件系统本身将 1 对 1 复制到新介质上。它还将克隆整个分区表和主驱动器的结构。

    这张图片不是iso,你不应该这样想。简而言之,您的驱动器和随后的图像将包含整个驱动器结构:

    |<-- sda ------------------------------------------------------------->|
    |                            |<-- sda1 --->|<-- sda2 --->|<-- sdaN --->|
    +--+--+--+--+--+--+--+--+--+-+=============+=============+...==========+
    | MBR, part.table, boot.sect | partition 1 | partition 2 | partition n |
    +--+--+--+--+--+--+--+--+--+-+=============+=============+...==========+
    

    您的新驱动器也将拥有它。

    除了 root 权限之外,您不需要任何花哨的东西来复制您的主设备并写入目标块设备。

    您还可以制作系统分区的映像(假设是 /dev/sda1),在目标驱动器上创建一个新的分区表,确保您的系统分区至少与映像一样大,然后将 sda1.img 复制到 /dev /sdb1 并使用您选择的引导管理器使其可引导。但它的工作量更大,尤其是在像你这样的场景中。

    - 假设您只需要第一个分区,如评论中所述,您还可以复制 /dev/sda 的第一部分,包含分区表/引导加载程序 + 第一个分区 (/dev/sda1) 并将其复制到您的目的地。

    $ dd if=/dev/sda of=/mnt/master1.img bs=1M count=7600
    (...)
    $ dd if=/mnt/master1.img of=/dev/sdb
    
    |<-- sda -----------------------------------
    |                            |<-- sda1 --->|
    +--+--+--+--+--+--+--+--+--+-+=============+
    | MBR, part.table, boot.sect | partition 1 |
    +--+--+--+--+--+--+--+--+--+-+=============+
    

    分区表会有些错误,因为它将包含不存在的分区,将来可能需要修复,但它会起作用。它并不优雅,但会起作用。

    • 2
  2. White Owl
    2022-07-07T19:08:29+08:002022-07-07T19:08:29+08:00

    将备份(例如,使用Bacula, TimeVault,甚至应该能够进行正确的备份)到 NAT/USB。然后在新机器上从 LiveCD/LiveUSB 启动,然后从备份中恢复。TimeshiftClonezilla

    • 0
  3. InjectedScript
    2022-07-07T19:44:00+08:002022-07-07T19:44:00+08:00

    程序ukopp,您可以在 apt 包中找到它apt install ukopp。它是一个 GUI,可以将您的系统/文件备份/存储到外部驱动器,通常是 USB。从那里您应该能够使用 USB 上的映像“闪存”您的其他 SSD。

    • 0
  4. Blockchain Office
    2022-07-14T06:38:15+08:002022-07-14T06:38:15+08:00

    克隆整个驱动器、带有数据的分区或驱动器上的操作系统的最佳方法是dd命令。

    在我看来dd,最适合克隆/备份设备/分区。

    dd将逐位克隆所有内容。

    在您开始试验和尝试不同的工具之前dd,如果您可以选择,我会使用 将设备完整备份/克隆到另一个设备,并检查备份/克隆是否有效。

    例如,如果您的整个设备都被加密,luks您可以进行整个克隆并闪存到您的新设备,这也可以!

    如果你使用挂载的 fuse/sshfs,你也可以直接备份/克隆到这个网络文件夹。

    您可以列出所有块设备lsblk

    例子:

    1. 如果您的驱动器是 /dev/sda 并且您想在目录或存储上存储/备份/克隆
    dd if=/dev/sda of=/home/user/osbkp.img bs=1M status=progress
    

    你不需要name.img它也可以是os123.bkp

    1. 在不创建映像的情况下将正在运行的系统实时克隆到目标驱动器。

    源是 /dev/sda,目标是 /dev/sdb

    dd if=/dev/sda of=/dev/sdb bs=1M status=progress
    

    有时您创建新的备份/克隆到您的新驱动器,但您无法从该设备启动,而不是使用 dd 重试(没有 100% 有效)

    1. 将映像克隆到新驱动器,其中目标是 /dev/sdb
    dd if=/home/user/osbkp.img of=/dev/sdb bs=1M status=progress
    
    1. 克隆给定的分区
    dd if=/dev/sda1 of=/home/user/part1.img bs=1M status=progress
    

    解释:

    如果=输入/源

    of=输出/目标

    bs=复制 的块大小 可以使用不同的块大小我更喜欢 1MB,您可以使用此设置加快或减慢处理速度,您必须自己找到最佳选择

    status=progress 实时状态

    1. 如果您使用 fat* 作为存储,您可以拆分文件,也可以查看这些帖子:

    将 dd 图像分解为多个文件

    在 FAT32 驱动器上使用 dd 创建 80GB 映像

    您必须牢记以下几点:

    0. dd 将克隆此设备的所有内容。

    你的驱动器是/dev/sda,你克隆这个

    有 5 个分区

    /dev/sda1 /dev/sda2 /dev/sda3 /dev/sda4 /dev/sda5

    您将从 /dev/sda 获得一个包含所有这些分区、mbr、gpt 等的文件。

    1.您可以克隆到每个驱动器/存储

    • 您可以从硬盘克隆到 USB,或从 USB 到硬盘等。然后从新设备运行克隆的操作系统

    2.您的运行目标设备必须具有相同的大小或必须更大

    • 您不能将较大的设备克隆到较小的驱动器或仅克隆分区的已用空间
    • 示例: 您要克隆的分区是 8 GB,但分区上的操作系统只有 1GB,因此您有 7 GB 的可用空间,您要克隆运行操作系统的目标是 4GB,这是不可能的!您将使用 dd 将整个设备克隆到您无法调整大小的新驱动器。

    如果您克隆到更大的设备,您可以使用剩余空间创建一个新分区并在您的新设备/操作系统上安装/使用它。

    如果您尝试将剩余空间合并到给定的分区,请小心!

    3.最好的方法是使用 live 系统或其他 linux 系统,而不是插入驱动器并从目标到源或从目标到存储克隆

    4.每个设备都有它唯一的 uuid 和标识设备的标签名称,如果您将驱动器 a 克隆到 b,并且您在一台 pc 中拥有两个驱动器,并且您尝试使用标签名称或 uuid 引导其中一个驱动器,请检查 grub 或您的bootmanager 你会遇到问题或者你启动了错误的操作系统。

    您可以使用blkid其他命令进行检查。

    您可以更改它并生成新的 uuid、标签等。但要小心

    5.您不需要格式化您的克隆映像将运行的驱动器 dd 将销毁/删除所有内容并从给定的支持操作系统创建新的 mbr、gpt、格式、文件系统等

    另一种方法是创建一个空白操作系统并复制您需要的所有文件夹和文件。

    有很多教程。

    检查如何使用创建 linux 系统备份rsync

    如何使用 Rsync 备份整个 Linux 系统

    使用 rsync 进行完整系统备份

    用 dd 创建你的基本克隆并做你的事情,但后来我的意思是最好只克隆/复制更改的文件。

    在 GNU/LINUX 中,一切都是文件。

    • 0
  5. dirkt
    2022-07-14T09:12:57+08:002022-07-14T09:12:57+08:00

    我一般来说,你不能克隆一个正在运行的文件系统,因为你会得到不一致的数据。某些更改可能仍在内存中,即使您sync,也可能会出现其他更改。

    但是,如果您的文件系统支持快照(例如在 中btrfs),您可以制作文件系统当前状态的快照,让系统在原始“分支”上运行,然后克隆静态快照。

    澄清我的目标:我在一块小板上安装了 32 位 Debian 10。它正在运行一些定制的应用程序。我想对 .img 文件进行一些更改并创建一个。

    因此,请尝试卸载您进行更改的文件系统,然后克隆它们。这在很大程度上取决于您拥有哪些文件系统、哪些挂载点、更改在哪里、根文件系统是否有更改,以及您的常规设置。无法笼统地回答。

    • 0

相关问题

  • du/df 和 ls 报告不同的磁盘使用情况

  • 需要一些系统调用

  • astyle 不会更改源文件格式

  • Linux 内核开发人员如何处理数百万行代码的工作?他们是一种方法吗?[关闭]

  • 通过标签将根文件系统传递给linux内核

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve