跳到主要内容

9. 硬盘挂载

10.1 磁盘分区

df 、 lsblk 和 fdisk -l 这三个命令都与磁盘和文件系统有关,但它们在功能和用法上略有不同。

  • df 用于显示已挂载文件系统的使用情况,主要关注文件系统的使用率和可用空间
  • lsblk 用于列出块设备的信息,提供更详细的设备层次结构,包括磁盘、分区和挂载点
  • fdisk -l 用于显示磁盘分区表的详细信息,包括分区的起始扇区、大小和文件系统类型等

以上命令注意要以超级用户或管理员权限运行,以便获得完整的输出信息。

10.1.1 df

  1. 打开Core3566 终端输入:

    linaro@linaro-alip:~$ df -h
    Filesystem Size Used Avail Use% Mounted on
    /dev/root 5.9G 3.0G 2.7G 53% /
    devtmpfs 1.9G 8.0K 1.9G 1% /dev
    tmpfs 1.9G 0 1.9G 0% /dev/shm
    tmpfs 1.9G 17M 1.9G 1% /run
    tmpfs 5.0M 4.0K 5.0M 1% /run/lock
    tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
    tmpfs 1.9G 12K 1.9G 1% /tmp
    /dev/mmcblk0p7 123M 13M 104M 11% /oem
    /dev/mmcblk0p8 23G 44K 22G 1% /userdata
    tmpfs 389M 12K 389M 1% /run/user/1000
    /dev/sda 29G 64M 29G 1% /media/linaro/38E6EAF8E6EAB572
  2. 以下是 df -h 命令输出中各个参数的含义:

    • Filesystem:文件系统的名称或设备路径
    • Size:文件系统的总大小
    • Used:已使用的空间大小
    • Avail:可用空间大小
    • Use%:已使用空间占总空间的百分比
    • Mounted on:文件系统的挂载点
  3. 对于输出中的每一行,这些参数显示了相应文件系统的使用情况。

    • 第一行 /dev/root 文件系统,它的总大小为 5.9GB,已使用 3.0GB,可用空间为 2.7GB,使用率为 53%。它被挂载在根目录 / 上。
    • 接下来的几行/dev/mmcblk0p7、/dev/mmcblk0p8、/dev/sda等分区显示了其他的文件系统和它们的挂载点,/dev/sda 是通过外部 USB 设备挂载的分区。
    • 临时文件系统(tmpfs)的挂载点,如 /dev/shm、/run、/run/lock、/sys/fs/cgroup 和 /tmp。这些临时文件系统是内存中的文件系统,不会持久保存数据。
    • /run/user/1000 是特定用户的临时文件系统,根据用户的 ID 可能会有所变化。
  4. 注意:文件系统的名称、设备路径和挂载点可能因系统配置而有所不同。输出中的数值单位是以 GB、MB 或 KB 表示的文件大小。

10.1.2 lsblk

  1. 打开Core3566 终端输入:

    linaro@linaro-alip:~$ lsblk
    NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    sda 8:0 1 28.9G 0 disk /media/linaro/38E6EAF8E6EAB572
    sdb 8:16 0 119.2G 0 disk
    └─sdb1 8:17 0 119.2G 0 part /media/linaro/24FC743CFC7409F6
    mmcblk0 179:0 0 29.1G 0 disk
    ├─mmcblk0p1 179:1 0 4M 0 part
    ├─mmcblk0p2 179:2 0 4M 0 part
    ├─mmcblk0p3 179:3 0 64M 0 part
    ├─mmcblk0p4 179:4 0 64M 0 part
    ├─mmcblk0p5 179:5 0 32M 0 part
    ├─mmcblk0p6 179:6 0 6G 0 part /
    ├─mmcblk0p7 179:7 0 128M 0 part /oem
    └─mmcblk0p8 179:8 0 22.8G 0 part /userdata
    mmcblk0boot0 179:32 0 4M 1 disk
    mmcblk0boot1 179:64 0 4M 1 disk
    nvme0n1 259:0 0 119.2G 0 disk
    └─nvme0n1p1 259:1 0 119.1G 0 part
  2. 以下是 lsblk 命令输出中各个参数的详细含义:

    • NAME:块设备的名称
    • MAJ:MIN:块设备的主设备号和次设备号
    • RM:设备是否为可移动设备(1 表示可移动设备,0 表示非可移动设备)
    • SIZE:设备的总大小
    • RO:设备是否为只读(1 表示只读,0 表示可读写)
    • TYPE:设备的类型(disk 表示磁盘,part 表示分区)
    • MOUNTPOINT:设备的挂载点
  3. 对于输出中的每一行,这些参数提供了关于块设备的详细信息。在输出中,主要有以下设备:

    • sda 是一个 u 盘,支持热插拔,RM=1,大小32G,换算到系统里是28.9G,可读可写。
    • sdb 是一个msata硬盘,通过USB TO SATA连接,不支持热插拔,RM=0,大小是120G的,换算到系统里是119.2G,可读可写,只有一个分区就是sdb1,被挂载到了 /media/linaro/24FC743CFC7409F6上。
    • mmcblk0 是板载 emmc,不支持热插拔,RM=0,大小32G,换算到系统是29.1G,可读可写,有八个分区:mmcblk0p6是根文件的分区,存放根文件系统,被挂载到/(根目录下的),mmcblk0p7被挂载到/oem,大小为128M; mmcblk0p8被挂载到了 /userdata 分区上,大小为22.8G;
    • nvme0n1 是一个NVMe 硬盘,不支持热插拔,RM=0,大小是120G的,换算到系统里是119.2G,可读可写,未挂载。

10.1.3 fdisk

  1. 打开Core3566 终端输入:

    linaro@linaro-alip:~$ sudo fdisk -l
    Disk /dev/ram0: 4 MiB, 4194304 bytes, 8192 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes


    Disk /dev/mmcblk0: 29.1 GiB, 31272730624 bytes, 61079552 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: gpt
    Disk identifier: 29520000-0000-4513-8000-796200006B99

    Device Start End Sectors Size Type
    /dev/mmcblk0p1 16384 24575 8192 4M unknown
    /dev/mmcblk0p2 24576 32767 8192 4M unknown
    /dev/mmcblk0p3 32768 163839 131072 64M unknown
    /dev/mmcblk0p4 163840 294911 131072 64M unknown
    /dev/mmcblk0p5 294912 360447 65536 32M unknown
    /dev/mmcblk0p6 360448 12943359 12582912 6G unknown
    /dev/mmcblk0p7 12943360 13205503 262144 128M unknown
    /dev/mmcblk0p8 13205504 61079487 47873984 22.8G unknown


    Disk /dev/nvme0n1: 119.2 GiB, 128035676160 bytes, 250069680 sectors
    Disk model: SAMSUNG MZALQ128HBHQ-000L1
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0xe998fbfc

    Device Boot Start End Sectors Size Id Type
    /dev/nvme0n1p1 303104 250067631 249764528 119.1G 7 HPFS/NTFS/exFAT


    Disk /dev/sda: 28.9 GiB, 31029460992 bytes, 60604416 sectors
    Disk model: DataTraveler 3.0
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x73736572

    Device Boot Start End Sectors Size Id Type
    /dev/sda3 0 0 0 0B 0 Empty
  2. 以下是各个参数的详细含义:

    • Disk /dev/ram0:一个大小为 4MB 的 RAM 磁盘。

      • Units:扇区的单位大小。
      • Sector size (logical/physical):逻辑扇区大小和物理扇区大小。
      • I/O size (minimum/optimal):最小和最佳的输入/输出大小。
    • Disk /dev/mmcblk0:Core3566自带的EMMC 磁盘,大小为 29.1GB 。

      • Units:扇区的单位大小。
      • Sector size (logical/physical):逻辑扇区大小和物理扇区大小。
      • Disklabel type:磁盘的分区表类型(gpt 表示 GUID 分区表)。
      • Disk identifier:磁盘的标识符。
      • Device:设备名称。
      • Start:分区的起始扇区。
      • End:分区的结束扇区。
      • Sectors:分区的扇区数量。
      • Size:分区的大小。
      • Type:分区的类型。
    • Disk /dev/nvme0n1:一个大小为 119.2GB 的 NVMe 磁盘。

      • Disk model:磁盘的型号。
      • Units:扇区的单位大小。
      • Sector size (logical/physical):逻辑扇区大小和物理扇区大小。
      • Disklabel type:磁盘的分区表类型(dos 表示 MBR 分区表)。
      • Disk identifier:磁盘的标识符。
      • Id:分区的标识符。
      • 在输出中,只有一个分区 /dev/nvme0n1p1,它是一个大小为 119.1GB 的 HPFS/NTFS/exFAT 类型分区。
    • Disk /dev/sda:是一个大小为 28.9GB 的 U 盘,只有一个分区 /dev/sda3,但它是一个空的分区。

10.2 磁盘分区操作

  1. 指定要分区的硬盘,进入分区模式:

    linaro@linaro-alip:~$ sudo fdisk /dev/nvme0n1

    Welcome to fdisk (util-linux 2.33.1).
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.


    Command (m for help): m

    Help:

    DOS (MBR)
    a toggle a bootable flag
    b edit nested BSD disklabel
    c toggle the dos compatibility flag

    Generic
    d delete a partition
    F list free unpartitioned space
    l list known partition types
    n add a new partition
    p print the partition table
    t change a partition type
    v verify the partition table
    i print information about a partition

    Misc
    m print this menu
    u change display/entry units
    x extra functionality (experts only)

    Script
    I load disk layout from sfdisk script file
    O dump disk layout to sfdisk script file

    Save & Exit
    w write table to disk and exit
    q quit without saving changes

    Create a new label
    g create a new empty GPT partition table
    G create a new empty SGI (IRIX) partition table
    o create a new empty DOS partition table
    s create a new empty Sun partition table
  2. 在 fdisk 交互界面中输入 m 可以得到帮助,帮助里列出了 fdisk 可以识别的交互命令,我们来解释一下这些命令:

    命令说 明
    a设置可引导标记
    b编辑 bsd 磁盘标签
    c设置 DOS 操作系统兼容标记
    d删除一个分区
    1显示已知的文件系统类型。82 为 Linux swap 分区,83 为 Linux 分区
    m显示帮助菜单
    n新建分区
    0建立空白 DOS 分区表
    p显示分区列表
    q不保存退出
    s新建空白 SUN 磁盘标签
    t改变一个分区的系统 ID
    u改变显示记录单位
    V验证分区表
    w保存退出
    X附加功能(仅专家)

10.2.1 创建分区

我们要建立一个主分区,命令如下:

linaro@linaro-alip:~$ sudo fdisk /dev/nvme0n1

Welcome to fdisk (util-linux 2.33.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p #查看分区列表
Disk /dev/nvme0n1: 119.2 GiB, 128035676160 bytes, 250069680 sectors
Disk model: SAMSUNG MZALQ128HBHQ-000L1
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xe998fbfc

Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free) # p为主分区
e extended (container for logical partitions) # e为扩展分区
Select (default p): p # 这里我选择新建主分区,回车
Partition number (1-4, default 1): 1 # 选择分区编号1,回车
First sector (2048-250069679, default 2048): # 这里回车即可,一般为上一个分区的结束大小作为此分区的开始大小
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-250069679, default 250069679): +5G #建立一个5GB大小的分区

Created a new partition 1 of type 'Linux' and of size 5 GiB.

Command (m for help): p

Disk /dev/nvme0n1: 119.2 GiB, 128035676160 bytes, 250069680 sectors
Disk model: SAMSUNG MZALQ128HBHQ-000L1
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xe998fbfc

Device Boot Start End Sectors Size Id Type
/dev/nvme0n1p1 2048 10487807 10485760 5G 83 Linux

Command (m for help): w #最后保存退出
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

10.2.2 删除分区

删除分区命令如下:

linaro@linaro-alip:~$ sudo fdisk /dev/nvme0n1

Welcome to fdisk (util-linux 2.33.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): d
Selected partition 1
Partition 1 has been deleted.

Command (m for help): p
Disk /dev/nvme0n1: 119.2 GiB, 128035676160 bytes, 250069680 sectors
Disk model: SAMSUNG MZALQ128HBHQ-000L1
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xe998fbfc

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

10.3 磁盘格式化

格式化就是将分区格式化为不同的文件系统。Linux 下的文件类型有 ext2、ext3、ext4、xfs 等等,我们可以使用 mkfs 命令然后用按TAB、TAB 来查看都有哪些文件类型。(此命令要谨慎使用,建议移除多余设备,确保自己的资料已经备份)

linaro@linaro-alip:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 1 28.9G 0 disk /media/linaro/38E6EAF8E6EAB572
mmcblk0 179:0 0 29.1G 0 disk
├─mmcblk0p1 179:1 0 4M 0 part
├─mmcblk0p2 179:2 0 4M 0 part
├─mmcblk0p3 179:3 0 64M 0 part
├─mmcblk0p4 179:4 0 64M 0 part
├─mmcblk0p5 179:5 0 32M 0 part
├─mmcblk0p6 179:6 0 6G 0 part /
├─mmcblk0p7 179:7 0 128M 0 part /oem
└─mmcblk0p8 179:8 0 22.8G 0 part /userdata
mmcblk0boot0 179:32 0 4M 1 disk
mmcblk0boot1 179:64 0 4M 1 disk
nvme0n1 259:0 0 119.2G 0 disk
linaro@linaro-alip:~$ sudo mkfs
mkfs mkfs.bfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.minix mkfs.ntfs

linaro@linaro-alip:~$ sudo mkfs.ext4 /dev/nvme0n1
mke2fs 1.44.5 (15-Dec-2018)
Found a dos partition table in /dev/nvme0n1
Proceed anyway? (y,N) y
Discarding device blocks: done
Creating filesystem with 31258710 4k blocks and 7815168 inodes
Filesystem UUID: aa2d60dc-8d46-46e3-820f-e90dbd5cd968
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done
Writing inode tables: done
Creating journal (131072 blocks): done
Writing superblocks and filesystem accounting information: done

10.4 磁盘挂载

10.4.1 手动挂载

  1. 首先在根目录下创建挂载点:

    sudo mkdir /mnt/luckfox
  2. 挂载硬盘:

    linaro@linaro-alip:~$ sudo mount /dev/nvme0n1 /mnt/luckfox/
    linaro@linaro-alip:~$ lsblk
    NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    sda 8:0 1 28.9G 0 disk /media/linaro/38E6EAF8E6EAB572
    mmcblk0 179:0 0 29.1G 0 disk
    ├─mmcblk0p1 179:1 0 4M 0 part
    ├─mmcblk0p2 179:2 0 4M 0 part
    ├─mmcblk0p3 179:3 0 64M 0 part
    ├─mmcblk0p4 179:4 0 64M 0 part
    ├─mmcblk0p5 179:5 0 32M 0 part
    ├─mmcblk0p6 179:6 0 6G 0 part /
    ├─mmcblk0p7 179:7 0 128M 0 part /oem
    └─mmcblk0p8 179:8 0 22.8G 0 part /userdata
    mmcblk0boot0 179:32 0 4M 1 disk
    mmcblk0boot1 179:64 0 4M 1 disk
    nvme0n1 259:0 0 119.2G 0 disk /mnt/luckfox
  3. 挂载之后,/mnt/luckfox/ 目录下会有一个 lost+found 文件

    linaro@linaro-alip:~$ ls /mnt/luckfox/
    lost+found
  4. 卸载挂载点使用 umount 命令:

    sudo umount /mnt/luckfox/
    或者
    sudo umount /dev/nvme0n1

10.4.2 自动挂载(谨慎使用)

注意:此部分操作需要认真核对配置文件的参数,及时备份自己的资料,配置错误可能会导致设备无法开机,推荐使用手动挂载。

  1. 使用blkid来查看分区的 UUID,UUID 唯一标识每一个分区,防止错误的挂载。除此之外,还会显示分区的类型。

    linaro@linaro-alip:~$ sudo blkid
    /dev/mmcblk0: PTUUID="29520000-0000-4513-8000-796200006b99" PTTYPE="gpt"
    /dev/mmcblk0p1: PARTLABEL="uboot" PARTUUID="c2400000-0000-4e2e-8000-5abf000040fa"
    /dev/mmcblk0p2: PARTLABEL="misc" PARTUUID="58640000-0000-443f-8000-6e6b00004a4b"
    /dev/mmcblk0p3: PARTLABEL="boot" PARTUUID="b2660000-0000-4131-8000-062f00006ed5"
    /dev/mmcblk0p4: PARTLABEL="recovery" PARTUUID="9a560000-0000-4b13-8000-5bd1000034dd"
    /dev/mmcblk0p5: PARTLABEL="backup" PARTUUID="d6270000-0000-4b18-8000-0919000046ae"
    /dev/mmcblk0p6: UUID="621abe90-b0a0-496c-a99c-b0a58f899d64" TYPE="ext4" PARTLABEL="rootfs" PARTUUID="614e0000-0000-4b53-8000-1d28000054a9"
    /dev/mmcblk0p7: LABEL="oem" UUID="0ecbbe64-5664-4b7a-a9cc-d9e5139b6336" TYPE="ext2" PARTLABEL="oem" PARTUUID="6d240000-0000-4c0a-8000-4ebf000036c7"
    /dev/mmcblk0p8: UUID="9b683981-e9c2-488b-8756-40f82c41d907" TYPE="ext2" PARTLABEL="userdata" PARTUUID="582b0000-0000-4e10-8000-10ad00001f9f"
    /dev/nvme0n1: UUID="aa2d60dc-8d46-46e3-820f-e90dbd5cd968" TYPE="ext4"
    /dev/sda: UUID="38E6EAF8E6EAB572" TYPE="ntfs"
  2. 在根目录下创建挂载点:

    sudo mkdir /mnt/luckfox
  3. 要挂载 NVME 硬盘修改 /etc/fstab 文件,在文件末尾添加如下内容:

    UUID="aa2d60dc-8d46-46e3-820f-e90dbd5cd968" /mnt/luckfox  auto   defaults   0   2
    • /mnt/luckfox 是要挂载的文件夹
    • auto 要挂载的硬盘分区的文件系统格式,”auto”是自动判断文件按系统格式,除此之外还有”ext4”,”ntfs”等
    • defaults 配置文件的模式,”defaults”是默认选项,除此之外还有”mode=1777”,”rw,noauto”等
    • 02 分别是备份和检查顺序