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 / 问题 / 414192
Accepted
einpoklum
einpoklum
Asked: 2018-01-02 12:40:48 +0800 CST2018-01-02 12:40:48 +0800 CST 2018-01-02 12:40:48 +0800 CST

在不重新安装 Linux 的情况下切换笔记本电脑磁盘驱动器?

  • 772

我在笔记本电脑的硬盘上安装了 Lubuntu 17.04。我现在买了一块几乎相同大小的 SSD 作为替代品;它是空的,没有动过。

现在,我想切换磁盘,并将我在 HDD 上已经拥有的内容基本完全相同的内容转移到 SSD - 并且让我的 Linux 启动并运行而无需任何进一步的调整(可能是/etc/fstabUUID 问题除外)。

我怎样才能做到这一点...

  1. 没有额外 PC 的帮助?
  2. 在额外的 PC 的帮助下?

笔记:

  • 如有必要,我可以生成可启动的 U 盘。
  • 如有必要,我可以使用 CD/DVD 阅读器。
  • HDD 的使用率为 33%,因此数据适合 - 但 HDD 容量稍大。
  • 硬盘驱动器可能有一些临界坏的扇区(但现在 - Linux 启动并工作)。
  • 硬盘上只有一个分区,据我所知——考虑到我是唯一的用户,我也可以在 SSD 上保持这种方式,并且它不用作某些公共服务器等。
hard-disk system-installation
  • 2 2 个回答
  • 1234 Views

2 个回答

  • Voted
  1. Best Answer
    Michael Daffin
    2018-01-02T14:32:30+08:002018-01-02T14:32:30+08:00

    您有两种基本方法可以将安装切换到新磁盘、克隆磁盘或复制内容并修复系统(即引导加载程序、fstab 条目)。这两种方法都有其优点和缺点。

    这两种方法都需要另一个系统,该系统连接了该磁盘以及一些额外的存储空间或第二个磁盘。这可以是另一台笔记本电脑或台式机 - 或实际笔记本电脑上的 live usb/cd。

    如果您可以将两个磁盘都连接到系统,这是最简单的 - 但如果您不能这样做,您可以在交换驱动器时将额外的存储用作临时暂存区域。如果你有一个大的 USB 硬盘驱动器,可以使用它。一个更简单的选择可能是获得一个USB 机箱,它允许您将两个磁盘连接到同一台计算机。

    因此,使用 live usb 和 usb 机箱,您可以在要更换驱动器的笔记本电脑上完成所有操作。对于这两种方法,我将讨论在连接两个磁盘并且两者都未安装的情况下进行直接磁盘传输(即您安装了另一台计算机或正在使用现场 USB/CD)。我将使用/dev/sdS来指示源磁盘(在您的情况下为硬盘)并/dev/sdD指示目标磁盘。将这些替换为系统上的实际磁盘 - 请务必验证这些磁盘,因为出错会破坏您拥有的任何数据。

    方法一:克隆磁盘

    这是从磁盘转到相同大小或更大的磁盘时最简单的方法,但是通过额外的步骤可以从较大的磁盘转到较小的磁盘。这样做的主要缺点是它逐块复制磁盘,因此需要读取和写入整个磁盘。当磁盘大部分为空时,这将比复制系统花费更长的时间。

    您提到从稍大的磁盘到较小的磁盘,因此第一步是将源磁盘上的分区调整为小于目标磁盘的大小。使用gparted最容易做到这一点,只需确保缩小驱动器,使可用空间位于磁盘末尾。这可能需要一段时间,因为它必须将磁盘末尾的任何数据移动到新位置。

    dd现在您只需使用或将源磁盘克隆到目标ddrescue。ddrescue可能是可取的,因为它会更加努力地重新读取您提到的可能有的坏扇区。

    sudo ddrescue /dev/sdS --force /dev/sdD
    

    或者使用dd:

    sudo dd if=/dev/sdS of=/dev/sdD
    

    请注意,您将在写入期间收到目标磁盘已满的错误消息 - 这很好,因为我们调整了磁盘大小,因此磁盘末尾不应包含任何有用的内容。这就是为什么您必须确保将其调整为略小于目标的大小。

    现在您可以再次使用 gparted 来调整目标的大小以填充驱动器。

    您现在应该能够交换磁盘并引导新系统。

    方法2:复制根文件系统

    如果您只在大磁盘上使用少量空间,则此方法可能更快,但需要更多步骤来重新配置引导加载程序和 fstab 以引导系统。它还具有仅在源磁盘上读取的优点,因此破坏原始磁盘的可能性较小(尽管上述方法并非如此,因为由于目标小于源磁盘,您必须调整磁盘大小)。它也更加灵活,因为您可以根据需要轻松更改分区。

    第一步是在新驱动器上设置分区表并格式化分区。您提到驱动器上只有一个分区-据此我假设您使用的是旧版 bios 引导(因为 uefi 除了根文件系统之外还需要 vfat 分区)。这是最容易做到的parted:

    sudo parted /dev/sdD mklabel msdos
    sudo parted /dev/sdD mkpart primary ext4 0% 100%
    sudo mkfs.ext4 -F /dev/sdD1
    

    但你也可以使用fdiskorgdisk或者即使gparted你喜欢。如果您的源磁盘有更多分区,或者您想更改分区布局,您现在可以这样做 - 只需根据您的需要或要求设置目标磁盘。

    现在挂载源磁盘和目标磁盘。

    sudo mkdir -p /mnt/src /mnt/dest
    sudo mount /dev/sdS1 /mnt/src
    sudo mount /dev/sdD1 /mnt/dest
    

    如果您有/想要比此更多的分区,请将根安装在上述位置以及与该位置相关的其他分区。(例如,如果您的源有一个额外的引导分区,则将其挂载到 /mnt/src/boot)。

    现在将内容从源复制到目标。

    sudo rsync -avh /mnt/src/ /mnt/dest/
    

    这需要一段时间。如果它被中断,您可以通过重新运行命令来恢复它。

    您现在可以卸载源驱动器,因为我们不再需要它。

    sudo umount /mnt/source
    

    最后的步骤是修复系统,使其可以启动。首先为新系统打开/mnt/dest/fstab并修复它 - 如果分区布局相同,这应该是更新 UUID/驱动器号以反映新分区的问题。用于blkid获取所需信息,建议使用UUID=或PARTUUID=如果可用。

    最后,我们需要修复引导加载程序——在这里我假设您使用的是带有旧版 bios 的 grub2,如果这不是真的,请忽略这一点并按照有关如何恢复引导加载程序的说明进行操作。

    sudo grub-install --boot-directory=/mnt/dest/boot /dev/sdD
    

    可以在此处找到有关恢复 ubuntu 引导加载程序的更多信息。

    如果一切顺利,您应该能够关机、交换驱动器并启动新磁盘。

    附加功能

    通过第三个磁盘工作

    如果您无法将两个磁盘都附加到一台计算机上,您将需要一些额外的存储空间 - 这可能是 USB 磁盘、网络附加存储或您可以在本地访问的任何其他东西,并且足够大以存储磁盘或根文件系统。

    上述两种方法的总体过程是相同的,但是先从一个磁盘复制到另一个磁盘,然后再复制到临时暂存区;

    使用方法1:

    请注意,这要求暂存区域与您正在复制的磁盘一样大。

    将存储安装到/mnt/staging:

    sudo ddrescue /dev/sdS /mnt/staging/rootfs.img
    

    您可以随心所欲地保存所有文件。如果您愿意,您可以从这里压缩它并将其作为系统的备份。

    然后您可以关闭交换驱动器并再次启动 live usb 以恢复映像

    sudo ddrescue /mnt/staging/rootfs.img --force /dev/sdD
    

    请注意,源和目标的驱动器号可能与此方法相同。

    使用方法 2:

    请注意,这仅要求暂存区域在压缩时与文件系统一样大,而不是整个磁盘。

    将存储安装到/mnt/staging并且源安装到/mnt/src:

    sudo tar -C /mnt/src -caf /mnt/staging/roofs.tar.gz /
    

    然后,您可以关闭交换驱动器并再次启动 live usb 以在设置目标磁盘文件系统后恢复文件系统。

    sudo tar -C /mnt/dest -xf /mnt/staging/roofs.tar.gz /
    

    然后继续恢复 fstab 和 bootloader。

    • 4
  2. user232326
    2018-01-02T14:20:13+08:002018-01-02T14:20:13+08:00

    最简单的解决方案(如果 HDD 小于 SDD 并且 SDD 可以连接到计算机)是:

    1. 引导到笔式驱动器发行版。这样可以避免在 HDD 中打开临时文件。
    2. 使用 dd 将整个磁盘 HDD 复制到 SDD:

      dd if=/dev/HDD of=/dev/SDD bs=4k
      

      当然,必须将 HDD 和 SDD 替换为整个磁盘的正确名称,例如/dev/sdaor /dev/sdd(不是 partitions /dev/sda1)。

    3. 用计算机中的 SDD 替换 HDD。

    4. 一如既往的开机。

    唯一的问题是两个硬件的 UUID 相同,可能会阻止您将 HDD 分区安装为附加驱动器。如果需要,可以稍后更正。

    • 0

相关问题

  • 使用 hdparm (APM, Suspend) 的硬盘空闲设置

  • 在 MS-Windows 7 下对外部磁盘进行分区时,ntfs 的版本是什么

  • 我可以远程判断我是否有空闲的 SATA 端口

  • 将局域网硬盘挂载到 linux fedora

  • 以 100% 的利用率捕捉 /dev/loop -- 没有可用空间

Sidebar

Stats

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

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

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

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

    • 5 个回答
  • Marko Smith

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

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • 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
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +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
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +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