× К оглавлению На главную Об авторе

Дата и время публикации:
Дата и время модификации:

Назначение и применение в ОС GNU/Linux


1. Назначение

Накопители информации карт памяти SDС (от англ. Secure Digital Memory Card, далее по тексту – карты памяти SD) имеют три типа – SD, SDHC и SDXC.

Они описываются спецификацией, разработанной Ассоциацей SD (кратко называемой SDA от SD Association) и соблюдаемой её членов-компаний, таких как Panasonic, SanDisc и Toshiba. Данная спецификация разработана в целях стандартизации работы аппаратной части на физическом уровне (хост-контроллера) и программной части на логическом уровне представления данных и реализации доступа по чтению и записи на носителях информации.

Таким образом, спецификация делится на два уровня: первый для описания аппаратного уровня (англ. Physical Layer Specifiction), а второй для логического доступа к данным с использованием спецификации файловой системы (англ. File System Specifiction).

Согласно, 2-ой части File System Specification[pdf] версии 3.0, для разметки карт памяти SD могут применяться только файловые системы FAT, которые выбираются в соответствие с её емкостью и типом, значения которых приведены в таблице 1.1.

Таблица 1.1
Емкость карты SD Тип Файловая система Год адаптации Скорость записи
~2048MB[1] Карта памяти SD стандартной емкости (Standard Capacity SD Memory Card) FAT12/FAT16 2000 0.9 – 20MB/s
2,088.5MB,...,~32,768MB[1,4] Карта памяти SD большой емкости (High Capacity SD Memory Card – SDHC) [2] FAT32 2006 2 – 40MB/s
32896MB,...,~2048GB[1,4] Карта памяти SD повышенной емкости (Extended Capacity SD Memory Card – SDXC) [2] exFAT[3] 2009 Не более 300MB/s/s
Примечания: [1] Имеется ввиду, что карты памяти типа SD не могут иметь емкость свыше 2 GB, SDHC свыше 32 GB, а SDXC не более 2TB. [2] При этом, хост-контроллеры, которые имеют доступ по чтению и записи к картам типа SDHC должны иметь такой же доступ к картам памяти типа SD, а SDXC соответственно к обоим ранее перечисленным. [3] Карты типа SDXC должны поддерживать доступ файловой системы exFAT как по чтению, так и по записи. [4] Указанные минимальные границы емкости для SDXC – 32896MB (32896 × 1024 × 1024 байт) и SDHC – 2,088.5MB (2088.5 × 1024 × 1024 байт) призваны избежать "неразберихи", связанной с границей емкости. При этом карты типа SD должны быть не более 2048MB ( 2 × 1024 × 1024 байт). В случае нарушения указанных границ, работа карты SD не гарантируется, а результат выполнения операций чтения и записи остается непредсказуемым.

2. Применение

2.1 Виды подключений

Карты памяти SD, которые подключаются через шину USB (например, при использовании карт-ридеров), будут определяться как /dev/sdX, как показано в листинге 2.1.1.

Листинг 2.1.1

# cat /proc/partitions
major minor  #blocks  name
 . . .
   8        0    1967104 sda
   8        1    1966080 sda1
Примечаниe. Листинг 2.1.1 получен с использованием команды cat /proc/partitions для карты памяти SD емкостью 2 ГБ.

В тоже время, карты памяти SD присоединяемые к шине Multi Media Card (далее по тексту – mmc), будут определяться как /dev/mmcblkX, логические диски как /dev/mmcblkXpY. Пример такого определения приводится в листинге 2.1.2.

Листинг 2.1.2

...
/dev/mmcblk0: PTUUID="6917ef24" PTTYPE="dos"
/dev/mmcblk0p1: UUID="2411-1A8E" TYPE="exfat" PARTUUID="6917ef24-01"
Примечаниe. Листинг 2.1.2 с использованием команды blkid -c /dev/null для карты памяти SD емкостью более .

2.2 Обслуживание

Автор в настоящей статье умышленно пропускает операции по разметки карт памяти SD, т.к. указанные носители информации поступают потребителям уже отформатированными компаниями-членами ассоциации SD согласно таблицы 1.1 настоящего документа. Поэтому, далее речь пойдет об обслуживание в части проверки их работоспособности по применяемым файловым системам.

2.2.1 Файловая система FAT12/FAT16/FAT32

Файловая система FAT16/FAT12 использовалась и применяется до сих пор в картах памяти mmc/SD до 2ГБ. За исключением промышленных карт SD MMCplus версии 4, в которых возможно использовать как FAT16, так и файловую систему FAT32.

Проверку работоспособности карт памяти SD для упомянутых файловых систем лучше проводить, как показано в листинге 2.2.1.1

Листинг 2.2.1.1

$ sudo fsck.vfat -w -r -a -l /dev/sdb1

По умолчанию, fsck.vfat только лишь тестовый проход без исправления ошибок. Таким образом, для внесения исправления ошибок нужно дополнительно использовать опции ‘-a’ или ‘-r’. Последняя предоставляет возможность пользователю собственноручно управлять исправлением ошибок.

Опция ‘w’ обеспечивает немедленную запись на диск, а опция ‘l’ печатает на стандартное устройство ввода-вывода (по сисадмински – на консоль) не только имя файла, но и абсолютный путь. Так же можно добавить опцию ‘t’, которая позволит помечать bad сектора при отказе чтения.

В тоже время, как показано в листинге 2.2.1.2, перечисленные опции к fsck.vfat можно использовать, на первый взгляд иной системной утилитой fsck.fat.

Листинг 2.2.1.2

$ sudo fsck.fat -wralt /dev/sdb1

На самом деле, fsck.vfat и fsck.msdos являются всего лишь псевдонимами fsck.vfat, как показано в листинге 2.2.1.3 и служат для обратной совместимости, например к ранее написанным системным скриптам, которые могут использовать при инициализации системы.

Листинг 2.2.1.3

$ sudo ls -l /sbin/fsck.vfat
lrwxrwxrwx 1 root root 8 Jan 25  2017 /sbin/fsck.vfat -> fsck.fat
... 
$ sudo -l /sbin/fsck.msdos
lrwxrwxrwx 1 root root 8 Jan 25  2017 /sbin/fsck.msdos -> fsck.fat

Для получения и установки метки логическому диску используйте утилиту fatlabel(8), как показано в листинге 2.2.1.4

Листинг 2.2.1.4

$ sudo fatlabel /dev/sdb1 01234567-89
Примечаниe. Метка не будет установлена в случае, если она уже используется другим устройством. При этом, длина имени метки не может быть больше чем 11 символов.

2.2.2 Файловая система exFAT

Применяется в картах памяти повышенной емкости типа SDXC, имеющие размер более 32 ГБ.

Как показано в листинге 2.2.2.1, проверка работоспособности таких носителей производится без возможности восстановления утилитой exfatfsck(8).

Листинге 2.2.2.1

$ sudo exfatfsck /dev/sdb1

Для получения и установки метки логическому диску используйте утилиту exfatlabel(8), как показано в листинге 2.2.2.2

Листинг 2.2.2.2

$ sudo fatlabel /dev/sdb1 01234567-89
Примечаниe. Длина имени метки не может быть больше чем 15 символов. При использовании UTF-16 количество символов сокращается до 11, поэтому разумнее будет не вбивать больше чем 11 символов.

3. Особенности применения

При постоянном использование карты памяти SD, например в качестве источника хранения образов на сервере tftp и ftp, следует прописать точку монтирования /srv/ftp в файле /etc/fstab, как показано в листинге 3.1.

Листинг 3.1

# <file system>        <dir>            <type>    <options>                                                  <dump> <pass>
. . .
LABEL=01234567-89        /srv/ftp            vfat    defaults,uid=root,gid=users,fmask=037,dmask=027           0       2
Примечаниe. Для парирование сообщения типа "FAT-fs (mmcblk0p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck." в поле pass точки монтирования с меткой 01234567-89 установлено значение 2, которое при старте системы используется для запуска программы fsck.vfat на целостность файловой системы носителя. При этом, указанное значение имеет менее высокий приоритет перед точками монтирования со значением 1.

Соответственно, после выполнения команды `mount -a` в директории с правами суперпользователя root выполним беспрепятственно команды, приведенные в листинге 3.2.

Листинг 3.2

root@home:~# mkdir /srv/ftp/tstdir
root@home:~# 
root@home:~# touch /srv/ftp/tstdir/file-root
root@home:~# ls -l /srv/ftp/tstdir/
total 0
-rwxr-x--- 1 root user 0 May 13 20:58 file-root

При этом, для пользователей из группы users файлы в /srv/ftp будут доступны лишь только по чтению, что и иллюстрирует листинг 3.3

Листинг 3.3

user@home:~$ ls -l /srv/ftp/tstdir/
total 0
-rwxr-x--- 1 root user 0 May 13 20:58 file-root
user@home:~$  touch /srv/ftp/tstdir/file-user
touch: cannot touch '/srv/ftp/tstdir/file-user': Permission denied

Разграничение прав доступа между суперпользователем root и пользователей из группы users стало возможно благодаря использованию опций uid= и gid=, установившие владельца и группу пользователей для файлов и директорий. При этом, непосредственно разделение прав доступа между суперпользователем и пользователями из указанной группы, как это наблюдали в листинге 3.2 и 3.3, осуществляется с помощью опций fmask=037,dmask=027, которые устанавливают возможность просматривать файлы и директории в /srv/ftp, но не создавать и редактировать.

4. Библиография


1) Part 2. File System Specification V3.00 Final [pdf]

2) FAT on SD Card [pdf]

4) SDcard Tools. File System Design Guide

5) Man-page fsck.exfat(8)

6) How to Use MMC/SDC

7) Secure Digital MMC memory card fat16/fat32 driver

8) The Extended FAT file system. Differentiating with FAT32 file system[pdf]

9) Linux shell: understanding Umask with examples

10) ArchWiKi.fstab (Русский)