在 Armbian 系统上挂载存储卡

2024-10-15#Armbian#Linux

一些 ARM 小主机(比如机顶盒、玩客云主机等)支持插入SD卡,可用来扩展存储空间。Linux 服务器(包括 Armbian 系统)与 Windows 系统不同,系统通常不会自动挂载这些外置的存储卡,需要手动配置才可以。

查看块存储设备 🔗

在服务器上插入 SD 卡后,登录服务器,使用 lsblk 命令列出“块设备”:

$ lsblk
NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
mmcblk0      179:0    0  29.4G  0 disk 
mmcblk1      179:16   0   7.3G  0 disk 
├─mmcblk1p1  179:17   0   256M  0 part /boot
└─mmcblk1p2  179:18   0     7G  0 part /var/log.hdd
                                       /
mmcblk1boot0 179:32   0     4M  1 disk 
mmcblk1boot1 179:48   0     4M  1 disk 
zram0        253:0    0 494.2M  0 disk [SWAP]
zram1        253:1    0    50M  0 disk /var/log
zram2        253:2    0     0B  0 disk 

从设备的容量确定块设备的名称。由于插入的是 32GB 的 SD 卡,那么可以推断出设备名称为 mmcblk0

格式化存储卡 🔗

首先需要将存储卡格式化,创建文件系统。比如 extFAT 文件系统可在 Windows 使用;而 ext4 则只能在 Linux 使用。可根据具体情况选择。

格式化为 exFAT 文件系统 🔗

如果想将存储设备格式化为 exFAT 文件系统,那么可使用 mkfs.exfat 程序。为此,安装 exfatprogs

$ apt install exfatprogs

注意:exfat 文件系统不支持文件的所有权(ownership)。因此,chomodchown 等命令在 exfat 文件系统是无效的。比如若使用 chown 等命令,就会遇到如下错误:

chown: changing ownership of '****': Operation not permitted

然后格式化存储卡:

$ mkfs.exfat /dev/mmcblk0
exfatprogs version : 1.2.0
Creating exFAT filesystem(/dev/mmcblk0, cluster size=131072)

Writing volume boot record: done
Writing backup volume boot record: done
Fat table creation: done
Allocation bitmap creation: done
Upcase table creation: done
Writing root directory entry: done
Synchronizing...

exFAT format complete!

再次查看块设备:

$ lsblk
NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
mmcblk0      179:0    0  29.4G  0 disk 
└─mmcblk0p1  179:1    0  29.1G  0 part 
mmcblk1      179:16   0   7.3G  0 disk 
├─mmcblk1p1  179:17   0   256M  0 part /boot
└─mmcblk1p2  179:18   0     7G  0 part /var/log.hdd
                                       /
mmcblk1boot0 179:32   0     4M  1 disk 
mmcblk1boot1 179:48   0     4M  1 disk 
zram0        253:0    0 494.2M  0 disk [SWAP]
zram1        253:1    0    50M  0 disk /var/log
zram2        253:2    0     0B  0 disk 

格式化为 ext4 文件系统 🔗

使用 mkfs 将存储设备格式化为 ext4 文件系统的命令为:

$ mkfs -t ext4 /dev/mmcblk0

挂载存储卡 🔗

使用 mount 命令挂载文件系统。

挂载 extFAT 文件系统 🔗

比如将 extFAT 格式的 /dev/mmcblk0p1 挂载到 /mnt/sd1(注意,这里挂载的是 /dev/mmcblk0p1,不是 /dev/mmcblk0):

$ mkdir /mnt/sd1
$ mount --types exfat --source /dev/mmcblk0p1 --target /mnt/sd1
mount: (hint) your fstab has been modified, but systemd still uses
       the old version; use 'systemctl daemon-reload' to reload.

注意这里提示 fstab 已经被修改。根据提示执行:

$ systemctl daemon-reload

挂载 ext4 文件系统 🔗

如果文件系统为 ext4,那么命令为:

$ mount --types ext4 --source /dev/mmcblk0p1 --target /mnt/sd1

验证 🔗

此时,如果使用 df -h 命令查看文件系统磁盘空间,那么会发现有 SD 卡上的文件系统的磁盘用量了:

$ df -h
...
/dev/mmcblk0p1   30G  288K   30G   1% /mnt/sd1

此时如果重启系统,再次运行 df -h,那么就会发现:刚才挂载的文件系统不见了。

自动挂载文件系统 🔗

为了能够自动挂载文件系统,需要修改 fstab

首先,查看文件设备的块属性,得到 UUID:

$ blkid /dev/mmcblk0p1
/dev/mmcblk0p1: UUID="2406-2E03" BLOCK_SIZE="512" TYPE="exfat" PARTUUID="86153984-01"

挂载 extFAT 文件系统 🔗

修改 /etc/fstab 文件,添加一行记录:

UUID=2406-2E03 /mnt/sd1 exfat    defaults,user,fmask=111,dmask=000    0   0

这里的 fmaskdmask 分别是挂载的文件系统里的文件和目录的权限掩码的八进制取反。000777 的取反,表示任何人都可访问、可执行(打开目录时需要执行权限);111666 的取反,指的是任何人都可以访问,但不能执行。

挂载 ext4 文件系统 🔗

ext4 是 Linux 所使用的文件系统,因此支持文件权限。在 /etc/fstab 加入以下记录:

UUID=2406-2E03       /mnt/sd1       ext4            rw,user,relatime        0 2

验证自动挂载 🔗

/mnt/sd1 路径下创建文件,并添加内容。重启设备,再次查看刚刚添加的文件和内容,并使用 df -h查看文件系统的磁盘用量。确保在设备重启后,系统能自动挂载存储卡。


加载中...