Linux 挂载一个硬盘
在Linux中挂载一个硬盘通常需要以下几个步骤。假设你已经有一个新硬盘并想挂载它,步骤包括识别设备、创建分区、格式化分区并挂载它。
### 1. **确认硬盘设备名称**
首先,确认系统识别到了你的硬盘。可以使用 `lsblk` 或 `fdisk` 命令查看现有的硬盘设备。
```bash
lsblk
```
或
```bash
sudo fdisk -l
```
这将列出所有已连接的磁盘和分区。常见的硬盘设备名是 `/dev/sda`, `/dev/sdb`, `/dev/nvme0n1` 等。
### 2. **分区硬盘(如果需要)**
如果硬盘还没有分区,你需要使用 `fdisk`、`parted` 或 `cfdisk` 工具来为硬盘创建分区。以 `fdisk` 为例:
```bash
sudo fdisk /dev/sdX
```
其中 `/dev/sdX` 是你要分区的硬盘设备。进入 `fdisk` 命令后:
- 输入 `n` 来创建一个新分区。
- 输入 `p` 创建主分区。
- 然后设置分区大小。
- 最后输入 `w` 来保存分区表并退出。
### 3. **格式化分区**
假设你已经创建了分区,接下来需要对分区进行格式化。常见的文件系统格式是 `ext4`。
```bash
sudo mkfs.ext4 /dev/sdX1
```
其中 `/dev/sdX1` 是刚创建的分区。
### 4. **创建挂载点**
挂载点是一个目录,硬盘的内容会挂载在该目录下。通常,挂载点可以是 `/mnt` 或 `/media` 目录中的一个子目录。
```bash
sudo mkdir /mnt/mydisk
```
你可以根据需要将 `mydisk` 改为其他名称。
### 5. **挂载硬盘**
使用 `mount` 命令来挂载格式化后的分区:
```bash
sudo mount /dev/sdX1 /mnt/mydisk
```
这样,硬盘就挂载到了 `/mnt/mydisk` 目录。
### 6. **确认挂载**
你可以使用 `df -h` 命令来确认硬盘是否正确挂载:
```bash
df -h
```
查看是否列出了 `/mnt/mydisk`。
### 7. **设置开机自动挂载(可选)**
如果你想让硬盘在每次开机时自动挂载,你需要编辑 `/etc/fstab` 文件。
1. 获取分区的 UUID(比使用 `/dev/sdX1` 更稳定):
```bash
sudo blkid /dev/sdX1
```
2. 编辑 `/etc/fstab` 文件:
```bash
sudo nano /etc/fstab
```
3. 添加类似以下内容的一行:
```
UUID=<你的分区UUID> /mnt/mydisk ext4 defaults 0 2
```
4. 保存并退出。你可以通过重启系统或运行以下命令测试自动挂载:
```bash
sudo mount -a
```
### 总结
1. 使用 `lsblk` 或 `fdisk -l` 识别硬盘。
2. (可选)使用 `fdisk` 为硬盘创建分区。
3. 使用 `mkfs.ext4` 格式化分区。
4. 创建挂载点,并使用 `mount` 挂载硬盘。
5. (可选)编辑 `/etc/fstab` 设置自动挂载。
在Linux系统中,`/dev` 目录下存放的是所有设备的文件。`dev` 是 "device"(设备)的缩写,表示硬件设备的接口文件,Linux通过这些设备文件与硬件进行交互。
### 解释 `/dev` 和设备文件
- **`/dev` 目录**:这是设备文件的存放位置,几乎所有硬件设备(如硬盘、光驱、键盘、网络接口等)都会在 `/dev` 下有一个对应的文件。Linux 将硬件设备视作文件,通过这些文件来读取和写入数据。
- **设备文件**:这些文件并不是真正的文件,而是与硬件设备的接口。通过读取或写入这些设备文件,Linux可以与硬件进行通信。例如,当你访问 `/dev/sda1` 时,实际上是在与一个硬盘设备的第一个分区进行操作。
### `/dev/hda1` 是什么?
`/dev/hda1` 是一个设备文件,表示一个硬盘设备的第一个分区。
- **`hd`**:表示IDE类型的硬盘设备(早期的硬盘接口类型)。
- **`a`**:表示第一个硬盘,`hda` 就是第一个硬盘设备。如果有多个硬盘,第二个硬盘会是 `hdb`,依次类推。
- **`1`**:表示该硬盘的第一个分区。`hda2` 则表示第二个分区,`hda3` 表示第三个分区。
不过,现代Linux系统通常使用`/dev/sdX`表示硬盘设备,而不是`/dev/hdX`。`sd` 表示的是SCSI、SATA、USB或其他接口类型的存储设备。比如:
- `/dev/sda1`:表示第一个硬盘的第一个分区。
- `/dev/sdb2`:表示第二个硬盘的第二个分区。
### 总结
- **`/dev`**:是设备文件所在的目录,Linux系统通过这些文件与硬件设备通信。
- **`/dev/hda1`**:表示第一个IDE硬盘的第一个分区,现代系统多使用 `/dev/sdX` 表示硬盘和分区。
当你使用 `mount /dev/hda1 /mnt` 命令时,实际上是将第一个硬盘的第一个分区(`/dev/hda1`)挂载到 `/mnt` 目录下,以便访问硬盘中的文件。
当你执行 `mount /dev/sdd1 /mnt/lenovo/` 命令时,系统输出了 `FUSE exfat 1.2.7`,这表示你的系统正在使用 **FUSE** (Filesystem in Userspace) 和 **exFAT** 文件系统驱动程序 `1.2.7` 版本来挂载这个分区。
### 解释:
1. **FUSE (Filesystem in Userspace)**:
- FUSE 是一种允许非特权用户创建自己的文件系统的工具,它是在用户空间运行的,而不需要修改内核。
- 它通常用于支持Linux内核不直接支持的文件系统,例如 NTFS、exFAT 等。
2. **exFAT 文件系统**:
- exFAT(Extended File Allocation Table)是微软开发的一种文件系统,专为闪存驱动器(如USB闪存盘、SD卡等)设计。
- 相较于FAT32,exFAT支持更大的文件和分区大小,适合存储大文件(超过4GB)。
- 在大多数Linux系统上,exFAT并不是原生支持的,需要通过 FUSE 提供的 exFAT 驱动程序来挂载 exFAT 文件系统。
3. **1.2.7 版本**:
- 这表示你当前正在使用的 `exFAT` 驱动程序的版本是 `1.2.7`。
### 总结:
这条信息的意思是你的Linux系统正在使用 `FUSE` 和 `exFAT` 驱动程序 `1.2.7` 来挂载一个格式化为 exFAT 文件系统的分区 `/dev/sdd1`。这通常表示挂载操作成功,你可以访问 `/mnt/lenovo/` 目录中的内容。
如果你能成功访问目录中的文件,那么挂载已经完成。如果遇到任何问题,可能需要检查是否正确安装了 `fuse-exfat` 驱动程序。
在 Linux 中使用 `cp` 命令复制文件时,如果想显示复制过程中的进度,可以使用 `rsync` 或 `cp` 命令结合 `pv` 来完成。
### 方法 1:使用 `rsync` 显示进度
`rsync` 是一个功能强大的文件复制工具,支持增量传输,并且内置了显示进度的功能。你可以用 `rsync` 代替 `cp` 命令来复制目录,同时显示进度。
```bash
rsync -a --progress zhanglei /mnt/lenovo/export
```
解释:
- `-a`:归档模式,保留文件权限、时间戳、符号链接等。
- `--progress`:显示每个文件的传输进度。
### 方法 2:使用 `cp` 结合 `pv` 命令
`pv` (Pipe Viewer) 是一个可以用来监控数据传输进度的工具。通过 `pv` 和 `tar` 或 `cpio` 等工具组合,可以在复制文件时显示进度。
1. 安装 `pv`(如果尚未安装):
- 在 Ubuntu/Debian 系统上:
```bash
sudo apt install pv
```
- 在 CentOS/RHEL 系统上:
```bash
sudo yum install pv
```
2. 使用 `pv` 和 `tar` 组合实现进度显示:
由于 `cp` 本身无法直接显示进度,可以先将目录打包成 `tar` 文件流,并使用 `pv` 来显示进度,然后解压到目标目录:
```bash
tar cf - zhanglei | pv | tar xf - -C /mnt/lenovo/export
```
解释:
- `tar cf - zhanglei`:将 `zhanglei` 目录打包成 `tar` 文件流,`-` 表示输出到标准输出。
- `pv`:显示通过管道传输的数据流量。
- `tar xf - -C /mnt/lenovo/export`:从标准输入中解压到目标目录。
### 方法 3:使用 `cp` 的 `-v` 选项
虽然 `cp` 本身没有显示百分比进度的选项,但你可以使用 `-v` (verbose,详细模式)显示正在复制的文件。虽然它不会显示进度条或百分比,但可以看到每个文件的复制过程。
```bash
cp -rv zhanglei /mnt/lenovo/export
```
解释:
- `-r`:递归复制目录及其子目录。
- `-v`:显示详细信息,列出正在复制的文件。
### 总结
- 使用 `rsync --progress` 是最简单的方法,它直接显示进度条。
- `cp` 结合 `pv` 通过 `tar` 命令也可以显示进度条。
- `cp -v` 可以显示复制过程中每个文件的名称,但没有具体的进度条或百分比。