我有两个相同容量的驱动器(等于 1 个字节)。我需要交换他们的内容(一个是QVO,另一个是EVO,但是他们的应用程序选择错误)。
是否可以通过 Linux 中的管道或 FIFO 来做到这一点?
我正在考虑最终在某个时刻(在 Linux 驱动器或内存中)存储每个驱动器的 100/500 MB 并将其重写但到另一个磁盘,重复该过程。
我知道dd
还有第三个磁盘,但只需要对这两个进行操作。两个磁盘都是 1 TB SSD,其中一个已满 70%,另一个具有基本的 Linux 系统,数据不超过 20 GB。
我同意存在第三种带有操作系统的介质(在本例中为 Linux),但该磁盘的可用空间有限,假设我们最多可以使用 ~1 GB,因此我们无法制作完整的磁盘映像(即使是压缩的)。
一种解决方案是 bash 脚本。
请注意,使用第三个驱动器是首选方式,使用脚本是一种自杀任务!
因此,如果您没有(或无法访问)第三个驱动器并且您很绝望,请使用此方法!你被警告了!!
将上面的代码复制到文件中并使其可执行(chmod +x文件名)。然后你可以调用脚本- /dev/
sudo ./filename /dev/sdX /dev/sdY 16M
sdX应该是第一个驱动器(例如 /dev/sda 而不是/dev/sda1 !!)
- /dev/sdY 应该是第二个驱动器
- 16M 是选择的块大小( 16M代表16 MB,也可以是32M, 64M, 128M, 256M, ...)
我过去所做的是对每个磁盘进行精确克隆以释放单独磁盘上的存储空间,然后将它们克隆回预期的磁盘,并且克隆有助于防止出现问题时丢失数据。在 Windows 中,我使用“免费磁盘克隆”,即使目标分区较小,您也可以克隆分区,也允许复制硬件磁盘 ID,如果磁盘大小不同,那就太好了。
对于 linux 尝试命令“dd”,但要小心,如果你弄错了,它可能会出错......下面链接中关于 dd 的一些提示 https://opensource.com/article/18/7/how-use -dd-linux
意味着更多的评论这部分......虽然有点长
pbies,不确定这里的磁盘分区,假设您在磁盘 A 上有单个部分,有 700GB 数据,磁盘 B 也有单个部分,有 20GB 数据,使用可用空间在磁盘 B 上创建新分区,将磁盘 A 克隆到新分区在磁盘 B 上,现在您在磁盘 B 上的两个副本都完好无损。现在准备磁盘 A 以接收磁盘 B 的克隆作为主要部分,磁盘 A 的原始克隆作为辅助部分,现在这使磁盘 B 可以自由准备其分区以接收磁盘 A 的克隆作为主要部分,可能最好启动 live linux CD 来完成所有这些。 ..希望这些聪明人中的一个可以提供更多关于这在linux中是如何完成的以及什么最适合克隆和分区程序(ddrecue等)这对我来说很有意义,不确定其他人是否同意?
在“交换容量相同的两个驱动器的内容”的一般情况下,这个答案并不意味着帮助。它是针对特定问题量身定制的:
简而言之,该程序只是为了让您知道我们将要做什么:
详细地:
确定哪个磁盘是哪个:
挂载磁盘 A 的每个文件系统并修剪它:
然后卸载。您可以一次执行一个文件系统。对磁盘 B 上的至少一个文件系统也执行此操作,即您计划将映像写入的文件系统。
更多关于修剪这里,这里和这里。它的要点是双重的:
挂载磁盘 B 的选定文件系统。
确保没有挂载磁盘 A 的文件系统。读取整个磁盘 A 并将其图像压缩或稀疏存储在磁盘 B 的文件系统中。此示例使用压缩(并
pv
显示进度):卸载磁盘 B 的文件系统。
确保没有挂载磁盘 B 的文件系统。将磁盘 B 克隆到磁盘 A。您可以使用
dd
,cat
,cp
,来执行此操作ddrescue
,有很多工具。此示例使用pv
:现在您有磁盘 B 的两个副本,每个副本都包含磁盘 A 的映像。
从磁盘 B 中删除分区表或文件系统签名。如果磁盘 B 使用 BTRFS(所以现在 A 也使用它),这非常重要。潜在的问题是,如果您尝试挂载 BTRFS 文件系统并且在两个副本中找到它(相同的 UUID),那么它将被视为多设备文件系统;安装它可能会导致数据丢失。在下一步中,我们将从磁盘 A(B 的副本)挂载一个文件系统,所以要小心。
挂载用于存储磁盘 A 映像的文件系统的副本。请记住,该副本现在位于磁盘 A 上。
将数据从
image.gz
磁盘 B 恢复。这样磁盘 A 的原始内容将移动到磁盘 B:挂载每个磁盘的每个文件系统并修剪它。您可以一次执行一个文件系统。
请注意,如果任何步骤失败,那么您仍然可以相对轻松地恢复。这是因为每次您实际覆盖数据时,另一个磁盘都包含一个有效副本。