在 Trusty 上自动安装 SD 卡时遇到问题

在 Trusty 上自动安装 SD 卡时遇到问题

我需要一张 SD 卡,只要插入插槽即可无人值守地安装。这很正常,但问题是它没有安装,我不知道为什么。

/etc/fstab

#Entry for /dev/mmcblk0p1 :
UUID=_____   /mnt/SD-root ext3 defaults,nofail,umask=0027,utf8,comment=x-gvfs-show,x-gvfs-name=SD-root 0 2

编辑-1: 我也尝试/mnt//media/myname/上面的内容替换,并包括选项user,uid=1000(就是我)或users,但都无济于事。

挂载点为/mnt/SD-root/media/myname/SD-root。挂载点所有权设置为“root:adm”。

$ ls -Al /mnt/ | grep -e 'SD-root'
1 drwxr-x--- 3 root adm 1024 Sep 25 16:51 SD-root/

目前,非 root 用户挂载 SD 卡的唯一方法是:

$  sudo mount /dev/mmcblk0p1 /mnt/SD-root/

我错过了什么?

答案1

要在运行的系统中自动安装卡,/mnt可以使用附加udev规则。如果没有此规则,卡将安装在/media/$USER/…/dev/disk/…


以下脚本和 udev 规则创建一个文件夹/mnt并挂载具有已定义 UUID 的分区。在当前版本中,挂载点是挂载分区的标签。我个人认为,这是一个坏主意。我更喜欢 UUID 而不是标签,但 OP 想要这个解决方案。

  1. 剧本

    • 在中创建脚本/usr/local/bin

      sudo nano /usr/local/bin/mount_by
      
    • 添加以下代码

      #!/bin/sh
      export mount_point="/mnt/$1"
      existing_device=$(awk '$2 == ENVIRON["mount_point"] {print $1; exit}' < /proc/mounts)
      if [ -n "$existing_device" ]; then
        exit 1
      fi
      mkdir -p "$mount_point"
      sleep 1 # Perhaps not necessary, but in the test with the OP it was necessary
      mount "/dev/disk/by-uuid/$2" "$mount_point"
      exit 0
      
    • 使脚本可执行

      sudo chmod +x /usr/local/bin/mount_by
      
  2. udev 规则

    • 创建新规则

      sudo nano /etc/udev/rules.d/99-myrules.rules
      
    • 添加以下代码

      ENV{ID_FS_UUID}=="c8bf306d-3d5d-4878-8045-e4087494eff0", RUN+="/usr/local/bin/mount_by'%E{ID_PART_ENTRY_NAME}''%E{ID_FS_UUID}'"

      或者如果你的驱动器没有ID_PART_ENTRY_NAME,请尝试ID_FS_LABEL

    • 假设分区是/dev/sdc1替换为ENV{ID_FS_UUID}==上面的输出为

      udevadm 信息/dev/sdc1| awk -F='/ID_FS_UUID=/{打印$2}'
  3. 重启 udev

    sudo service udev restart
    
  4. 插入 SD 卡后你会看到类似这样的内容

    % ls -la /mnt
    total 12
    drwxr-xr-x  3 root root 4096 Okt  6 19:29 .
    drwxr-xr-x 25 root root 4096 Sep 29 17:04 ..
    drwxr-xr-x  4 root root 4096 Okt  6 19:31 Label1
    

答案2

我安装了全新的 Ubuntu 14.04 来测试这一点。SD 卡格式化为 EXT3。已自动安装。

这里输出的mount是不同的设置

  • 使用默认设置,没有 fstab 条目:

    /dev/mmcblk0p1 on /media/sneetsher/test0 type ext3 (rw,nosuid,nodev,uhelper=udisks2)
    
  • 使用 fstab:

    /dev/mmcblk0p1                            /media/test0    ext3    nodev,noexec,comment=x-gvfs-show 0       0
    

    安装为:

    /dev/mmcblk0p1 on /media/test0 type ext3 (rw,noexec,nodev)
    
  • 使用 fstab:

    /dev/mmcblk0p1                            /media/test0    ext3    defaults,nofail,umask=0027,utf8,comment=x-gvfs-show,x-gvfs-name=SD-root 0 2
    

    发现 dmesg 错误:

    [ 3339.729139] EXT4-fs (mmcblk0p1): Unrecognized mount option "umask=0027" or missing value
    

    删除后发现:

    [ 3410.950108] EXT4-fs (mmcblk0p1): Unrecognized mount option "utf8" or missing value
    

    删除后发现:

    [ 3490.129696] EXT4-fs (mmcblk0p1): Unrecognized mount option "x-gvfs-name=SD-root" or missing value
    

    变成:

    /dev/mmcblk0p1                            /media/test0    ext3    defaults,nofail,comment=x-gvfs-show,comment=x-gvfs-name=SD-root 0 2
    

    安装为:

    /dev/mmcblk0p1 on /media/test0 type ext3 (rw,_netdev)
    

    x-gvfs-name就像在 nautilus 中显示的那样有效SD-root

我是否遗漏了您的设置中的某些内容?

答案3

只需取得文件夹 /media/test0 的所有权。

chown 用户.user /media/test0

相关内容