Подключение USB Flash-диска и перенос на него файлов сайта




Здравствуйте, уважаемые читатели! На сегодняшний день доступный объём внутреннего NAND Flash диска заполнен всего на треть, а в обозримом будущем вряд ли предвидится его переполнение... Тем не менее, уже сейчас пора задуматься о расширении доступного дискового пространства микрокомпьютера. Кроме того, для уменьшения износа NAND Flash микрокомпьютера, лучше перенести файлы сайта на внешний носитель. Заменить внешний USB Flash-диск, согласитесь, намного проще, чем перепаивать микроcхему NAND прямо на плате. У меня под рукой как раз имеется USB Flash-диск на 8 Гб, который последнее время лежит без дела. Его-то я и буду монтировать в Raspbian микрокомпьютера.


В отличии от операционных систем Windows XP/Vista/7/8/8.1/10, в Raspbian флешка при подключении к USB-порту автоматически не монтируется, нужно обязательно прописывать её свойства в конфигурационных файлах! Вдобавок, в Rasbpian нет разделения отдельных дисков, зато диски можно монтировать в любой каталог, из которых монтируемый диск виден простым подкаталогом.

Можно отформатировать всю флешку под ext2, но к моему удивлению, поддержка ext2 в заводской прошивке микрокомпьютера напрочь отсутствует! Из доступного есть только экзотическая SQUASHFS, а также VFAT и MSDOS:

SQUASHFS - это специальная файловая система со сжатием, но поскольку она расчитана исключительно на чтение, от неё придётся сразу отказаться. MSDOS - это обычная классическая FAT16. VFAT - это расширенная FAT16, появившаяся в Windows 95, дополненная поддержкой длинных имён файлов. Когда вы форматируете флешку в Windows в FAT16, то на деле флешка будет отформатирована именно в VFAT, соответственно VFAT имеет ограничение на размер тома 2 Гб для совместимости с Windows 95 и 4 Гб для работы в Windows98 и выше. В любом случае, один раздел VFAT использовать весь имеющийся объём флешки в 8 Гб не может.

Помимо отсутствия поддержки ext2, прошивка микрокомпьютера весьма порадовала меня отсутствием возможности отформатировать раздел под файловые системы, отличные от с завода неподдерживаемой ext2! Вот так сюрприз! К сожалению, для приведения в порядок имеющихся средств работы с дисками нужно пересобирать дистрибутив Raspbian из исходных кодов. Поскольку объём флешки всего 8 Гб, можно пойти компромиссным путём - заранее под Windows разбить флешку на четыре раздела для совместимости с Windows 95 и форматировать их под FAT16 - это как раз нужная нам VFAT, а уже в Raspbian готовые разделы отдельно подмонтировать в удобный каталог. Однако, микрокомпьютер спокойно увидит и 4 Гб разделы VFAT, 2 Гб в моём случае - больше вопрос удобства. Итак, - поехали!


Увы, стандартный драйвер Windows не допускает создание нескольких разделов на съёмных носителях, поэтому для начала нужно установить специальный драйвер Hitachi, чтобы моя флешка опозналась как жёсткий диск. Процесс установки драйвера заметно отличается от описанного в различных интернет-мануалах, я распишу всё очень подробно.

После подключения флешки к компьютеру нужно запустить диспетчер устройств, во вкладке "Дисковые устройства" найти флешку и в свойствах устройства найти ID оборудования, а затем выделить и скопировать:

Далее, распаковать архив с драйвером в любое удобное место, открыть файл cfadisk.inf и в разделе [cfadisk_device] в строке

%Microdrive_devdesc% = cfadisk_install,USBSTOR\General_USB_Flash_Disk

подчёркнутый текст заменить на ранее скопированный ID оборудования:

и сохранить файл. Поскольку Windows считает, что драйвера флешки не нуждаются в обновлении, то простое обновление драйверов с указанием файлов не поможет, драйвер нужно ставить только вручную. Выделив правой кнопкой мыши свежесохранённый cfadisk.inf, запускаем установку:

Несмотря на красное предупреждение, всё равно устанавливаем драйвер, и система радостно рапортует о завершении:

После установки драйвера нужно дополнительно указать Windows на новый драйвер для флешки. Открываем диспетчер устройств и запускаем обновление драйверов с указанием поиска драйверов на компьютере:

Переходим к списку уже установленных драйверов,

выбираем свежеустановленный драйвер

и дожидаемся окончания установки:


Теперь флешка распознаётся системой как жёсткий диск и её можно разбивать на разделы. Запускаем управление дисками и удаляем уже ненужный раздел с FAT32,

и сразу начинаем создавать штатным мастером новые:

Указываем размер каждого тома в 1908 МБ - четверть объёма флешки:

Буква диска не имеет значения:

Указываем файловую систему FAT для форматрования:

Наконец, новый раздел готов к использованию:

На оставшемся неразмеченном месте, аналогичным образом создаём и форматируем все остальные разделы:

Готово, сейчас на флешке имеется четыре раздела, которые нормально распознаются микрокомпьютером:

Напоследок, копируем на первый раздел архив с драйвером, извлекаем флешку из компьютера и подключаем её к свободному USB порту микрокомпьютера.


Проверяем наличие флешки командой

fdisk -l

В микрокомпьютере флешка установилась как /dev/sda, имеет три основных раздела /dev/sda1, /dev/sda2, /dev/sda3, и расширенный раздел /dev/sda4, в котором находится логический диск /dev/sda5. Сам расширенный раздел служит лишь обрамлением для логического диска, и монтировать его не нужно. Пусть, разделы sda1, sda2, sda3 и, внимание, sda5 будут монтироваться соотвестсвенно в подкаталогах /usbflash1, /usbflash2, /usbflash3 и /usbflash4 каталога /mnt.


Благодаря уважаемому MaxN собрано тестовое ядро Raspbian с включённой поддержкой файловой системы EXT2. При прошивке тестового ядра уже не обязательно дробить USB Flash-диск на разделы для полного использования его объёма, и можно уже создать и форматировать раздел силами самого микрокомпьютера. Сначала командой fdisk -l узнаём список подключённых устройств:

Disk /dev/mtdblock0: 256 KiB, 262144 bytes, 512 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
Disk /dev/mtdblock1: 128 KiB, 131072 bytes, 256 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
Disk /dev/mtdblock2: 128 KiB, 131072 bytes, 256 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
Disk /dev/mtdblock3: 4 MiB, 4194304 bytes, 8192 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
Disk /dev/mtdblock4: 1019,5 MiB, 1069023232 bytes, 2087936 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
Disk /dev/mtdblock5: 1 GiB, 1073741824 bytes, 2097152 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
Disk /dev/sda: 15 GiB, 16059990016 bytes, 31367168 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: dos
Disk identifier: 0x3c7bc34d

Disk /dev/sda: 3,8 GiB, 4059561984 bytes, 7928832 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: dos
Disk identifier: 0x0015b569
Device     Boot Start     End Sectors  Size Id Type
/dev/sda1  *     2048 7928831 7926784  3,8G  e W95 FAT16 (LBA)

Командой fdisk /dev/sdb1 выбираем нашу флешку /dev/sdb1 и директивой d сносим все разделы. Далее директивой p создаём primary раздел, тремя нажатиями на клавишу ввода подтверждаем начальный сектор, конечный сектор и проведение операции. Раздел создан, теперь директивой q возвращаемся в командную строку

Наконец, командой mkfs.ext2 /dev/sda1 форматируем флешку под EXT2:

mke2fs 1.42.12 (29-Aug-2014)
/dev/sdb1 contains a vfat file system labelled 'DEBIAN WHEE'
Proceed anyway? (y,n) y
Creating filesystem with 990848 4k blocks and 248000 inodes
Filesystem UUID: db3a5d0b-d454-44b1-aba3-160f883c69f5
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done


Чтобы флешка сразу монтировалась при загрузке микрокомпьютера, в каталоге /etc нужно создать файл fstab и прописать в нём, какие разделы в какие каталоги будут монтироваться:

Чтобы изменения вступили в силу, нужно перезагрузить микрокомпьютер:

reboot

Просмотреть смонтированные устройства можно командой df

Как видите, все разделы флешки успешно смонтированы, а в файловом менеджере WinSCP можно просмотреть их содержимое. Вот и архив, который я скопировал на флешку перед её извлечением из компьютера:

Каталоги $RECYRCLE и System Volume Information в корневых каталогах разделов флешки были созданы Windows для своих нужд сразу же после их форматирования - для микрокомпьютера они точно не нужны и их можно без сожаления удалить на свалку истории.


Остаётся перенести хранящиеся в каталоге /var/www/html файлы сайта в, например, каталог usbflash1 смонтированного первого раздела флешки и прописать новый путь в файлах /etc/nginx/sites-available/default и /etc/nginx/sites-enabled/mb7707. Для этого нужно найти строку:

root /var/www/html;

и заменить её на

root /mnt/usbflash1/mb7707;


Вот и всё! Флешка успешно подмонтирована и файлы сайта перенесены на неё из внутренней NAND Flasn микрокомпьютера!


Нужно учесть один важный момент. Внутренняя NAND Flash изготовлена по классической SLC технологии - один бит на ячейку и имеет ресурс порядка 100 тысяч циклов перезаписи. А имеющийся у меня USB Flash диск построен на изготовленных по полуаналоговой двухбитной MLC технологии микросхемах. Это не лучшим образом сказывается на их сроке службы - гарантированный ресурс значительно падает - до 10 000 циклов. Я не говорю о уже ставших привычными трёхбитных TLC с ресурсом 3 000 циклов и новейшей технологией - четырёхбитной QLC с оценочным ресурсом в тысячу циклов! В итоге, примерно через полтора года после написания заметки, мой USB Flash диск стал выдавать ошибки при перезаписи большого количества мелких файлов - некоторые области уже оказались заметно изношены. В настоящее время Flash-диск заменён на новый.

В свете этих событий, установка заводом-изготовителем микросхемы NAND Flash небольшого объёма в 1 Гб, зато изготовленной по самой долговечной SLC технологии выглядит весьма обдуманным и взвешенным техническом решением! При разнице ресурсов SLC и MLC примерно на порядок, практическая долговечность NAND Flash микрокомпьютера составляет порядка 10 - 15 лет непрерывной работы.


Обновлено - 28.12.2019. Добавлено описание наблюдаемой практической долговечности USB Flash дисков.


Дополнено - 14.06.2022. Добавлено описание создания раздела на USB Flash диске на под файловую систему EXT2, а также возможности форматирования VFAT разделов объёмом до 4 Гб.


Благодарю за внимание, доброго здоровья!



Сайт работает на микрокомпьютере