当前位置:首页 > Linux > 正文

linux如何切换磁盘

在 Linux 中切换磁盘可通过 umount 卸载原 磁盘,再用 mount /dev/X Y(X 为新磁盘标识,Y 为目标挂载点)挂载新

在 Linux 系统中,”切换磁盘”这一表述可对应多种实际操作场景,主要包括查看/识别磁盘临时挂载/卸载磁盘永久挂载磁盘至指定目录更换系统主磁盘(需重装)等核心场景,以下将从底层原理到具体操作展开详细说明,覆盖物理机与虚拟机环境的典型需求。


前置认知:Linux 磁盘管理的核心逻辑

Linux 采用统一的设备树模型管理存储资源,所有存储设备均以 /dev 目录下的特殊文件形式存在(如 /dev/sda 表示第一块 SCSI/SATA 硬盘,/dev/nvme0n1 表示 NVMe 固态硬盘),磁盘的实际使用需经过 分区 → 格式化 → 挂载 三个关键步骤:

  • 分区:将物理磁盘划分为逻辑单元(通过 fdisk/parted 完成);
  • 格式化:为分区创建文件系统(如 ext4、xfs,通过 mkfs 完成);
  • 挂载:将格式化后的分区关联到文件系统的某个目录(通过 mount/etc/fstab 实现)。
    所谓”切换磁盘”,本质是根据需求选择不同的分区或物理磁盘,并通过上述流程使其可被系统访问。

全流程操作指南

(一)第一步:识别目标磁盘与现有分区

在执行任何操作前,必须准确定位目标磁盘,避免误操作破坏原有数据,常用工具如下:

工具名称 功能描述 典型输出示例
lsblk 列出所有块设备及其层级关系(推荐优先使用) NAME="sda" MAJ:MIN="8:0" RM="0.5" SIZE="100G" TYPE="disk"
fdisk -l 显示传统 MBR/GPT 分区表信息 Disk /dev/sda: 100 GiB, 512 bytes/sector, ...
blkid 查询设备的 UUID、文件系统类型等标识符 /dev/sda1: UUID="abc123" TYPE="ext4"
df -h 查看已挂载文件系统的磁盘使用情况 /dev/sda1 9.8G 3.2G 6.6G 33% /
dmesg | grep sd 内核日志中查找新接入的磁盘信息(适用于刚插入的移动硬盘/U盘) [ 1.234] scsi 0:0:0:0: Direct-Access ...

注意:若新增了外接磁盘(如 USB 硬盘),建议先拔插一次,确保系统能正确识别,对于云服务器,新挂载的数据盘通常会显示为未分区的新设备(如 /dev/vdb)。


(二)第二步:对目标磁盘进行分区(可选)

若目标磁盘是全新未分区的空白盘(如刚添加的第二块硬盘),需先创建分区,以下以 /dev/sdb 为例演示两种主流分区方式:

方式 1:传统 MBR 分区(兼容旧系统)

sudo fdisk /dev/sdb

进入交互式界面后,依次执行以下命令:

  • n → 新建分区;
  • p → 主分区;
  • 1 → 分区编号;
  • 回车默认起始扇区;
  • 回车默认结束扇区(占满整个磁盘);
  • t → 修改分区类型;
  • 83 → Linux LVM(若仅需普通分区可跳过此步);
  • w → 写入分区表并退出。

方式 2:GPT 分区(支持大磁盘 & EFI)

sudo parted /dev/sdb mklabel gpt
sudo parted /dev/sdb mkpart primary ext4 0% 100%  # 创建单个全容量的主分区

(三)第三步:格式化分区为文件系统

分区完成后,需为其赋予文件系统格式才能存储数据,常见文件系统及适用场景:

  • ext4:通用场景,稳定性高;
  • xfs:适合大文件存储(如数据库);
  • btrfs:支持快照、卷管理(实验性较强);
  • ntfs:Windows 兼容(需安装 ntfs-3g 驱动)。

/dev/sdb1 格式化为 ext4 为例:

linux如何切换磁盘  第1张

sudo mkfs.ext4 /dev/sdb1  # 根据提示确认操作(输入 y)

格式化完成后,可通过 blkid /dev/sdb1 查看生成的 UUID(后续挂载必备)。


(四)第四步:临时挂载磁盘(立即生效)

若只需短期使用该磁盘(如拷贝文件),可直接通过 mount 命令临时挂载:

sudo mount /dev/sdb1 /mnt/mydisk  # 将分区挂载到 /mnt/mydisk 目录

验证是否成功:df -h | grep mydisk 应显示该分区的使用情况。
卸载方法sudo umount /mnt/mydisk(需确保无进程正在访问该目录)。


(五)第五步:永久挂载磁盘(重启生效)

若希望每次开机自动挂载,需编辑 /etc/fstab 文件(系统启动时的挂载配置文件),操作步骤如下:

  1. 获取目标分区的 UUID(避免设备名变化导致的挂载失败):

    sudo blkid /dev/sdb1  # 输出类似:UUID="uuid-string"
  2. 备份原 fstab 文件(重要!):

    sudo cp /etc/fstab /etc/fstab.bak
  3. 编辑 fstab 文件(推荐使用 nanovim):

    sudo nano /etc/fstab

    在文件末尾添加一行(示例):

    UUID=uuid-string   /mnt/mydisk  ext4  defaults  0  2

    各字段含义:

    • 第一列:设备标识(推荐 UUID,也可写 /dev/sdb1);
    • 第二列:挂载点(需提前创建该目录,如 sudo mkdir -p /mnt/mydisk);
    • 第三列:文件系统类型;
    • 第四列:挂载选项(defaults 包含 rw、suid、dev、exec、auto、nouser、async);
    • 第五列:dump 备份策略(0 表示不备份);
    • 第六列:fsck 检查顺序(非根分区建议设为 2)。
  4. 测试配置有效性(关键!):

    sudo mount -a  # 模拟开机挂载,若无报错则配置正确

    若有错误(如 “wrong fs type”),需检查文件系统类型是否匹配。


特殊场景:更换系统主磁盘(警告:高风险!)

若需将系统从原磁盘(如 /dev/sda)迁移至新磁盘(如 /dev/sdb),需注意以下限制:

  • 仅适用于全新磁盘:原磁盘需保留至迁移完成前;
  • 必须重建引导加载程序:GRUB2 需重新安装到新磁盘;
  • 推荐方案:通过 Live CD/USB 启动系统,将原系统拷贝至新磁盘并修复引导。

简要步骤(以 Ubuntu 为例):

  1. 准备 Live USB,从其启动并打开终端;
  2. 识别原系统所在分区(如 /dev/sda1)和新磁盘(如 /dev/sdb);
  3. 创建新分区并格式化(参考前文步骤);
  4. 使用 rsync 同步数据:sudo rsync -avHP /media/root/old_root/ /mnt/new_root/
  5. 修改 /mnt/new_root/etc/fstab 中的设备标识为新磁盘;
  6. 安装 GRUB2 到新磁盘:sudo grub-install --boot-directory=/mnt/new_root/boot /dev/sdb
  7. 重启系统并从新磁盘启动。

强烈建议:此操作前务必完整备份原系统数据!


常见问题排查手册

现象 可能原因 解决方法
mount: wrong fs type fstab 中文件系统类型错误 检查 blkid 输出的实际文件系统类型
挂载后无法写入 fstab 缺少 rw 选项 确保第四列包含 rw(或直接写 defaults
开机后未自动挂载 fstab 语法错误 运行 sudo mount -a 检查报错信息
磁盘显示为只读 文件系统损坏或权限不足 sudo fsck -y /dev/sdb1 修复;检查权限设置
找不到目标设备 设备未正确连接或驱动缺失 lsblk 确认设备是否存在;更新内核模块

FAQs

Q1:为什么我按照教程挂载了磁盘,但在文件管理器里看不到?

A:可能原因有三:① 挂载点目录未创建(需先执行 sudo mkdir -p /mnt/mydisk);② fstab 配置错误(检查 mount -a 是否有报错);③ 文件管理器缓存问题(尝试重启或手动刷新),建议优先用 df -h 命令验证是否真的挂载成功。

Q2:如何安全卸载正在使用的磁盘?

A:直接 umount 会报错“device is busy”,正确方法是先终止占用该磁盘的进程:

  1. 找到占用进程:lsof /mnt/mydisk
  2. 杀死进程(谨慎操作):sudo kill -9 <PID>
  3. 再执行 sudo umount /mnt/mydisk,若仍失败,可尝试 sudo umount -l(延迟卸载)
0