Страницы

четверг, 20 сентября 2012 г.

Файловая система для флешки в Ubuntu

Понадобилось перенести большой файл с Windows компьютера на Ubuntu. Обычно стандартного форматирования FAT хватает, но в этот раз файлы были более 4 Гб, которые FAT не поддерживает. Флешка была отформатирована в файловую систему exFAT.

В Ubuntu exFAT не определилась сразу. Легкий поиск в сети указал путь.

Формат exFAT

Установка FUSE-реализации exFAT:


root@mir:# add-apt-repository ppa:relan/exfat
root@mir:# apt-get update
root@mir:# apt-get install fuse fuse-exfat exfat-utils

После этого всё заработало и достаточно шустро.

Однако, это дало повод задуматься о более совместимой файловой системе для переноса файлов между платформами Windows & Ubuntu.
Такая файловая система нашлась - UDF. UDF - Universal Disk Format - универсальный дисковый формат. Подходит для всех носителей, начиная с CD-R и заканчивая BD-дисками и обычными жесткими дисками и флешками. Поддерживает диски более 2Тб. 64-битная адресация.

Формат UDF

То что надо.

Установка UDF в Ubuntu.
root@mir:# apt-get install udftools

Форматирование флешки.

Небольшое отступление. Появившиеся не так давно SSD диски, выявили такую свою особенность как необходимость выравнивания разделов для сохранения ресурса и ускорения операций. Флешки - суть те же SSD и также требуют выравнивания разделов.  MBR не очень удачный выбор, т.к. приходится высчитывать смещения вручную и нет поддержки утилитами. Лучше использовать GPT, тем более через пару лет это будет основная система разделения жестких дисков. Плюс в том, что форматирирование в эту систему доступно из стандартной утилиты "Диски" входящей в комплект Ubuntu 12.10 Gnome Shell Remix, под коим это всё происходит. Также можно воспользоваться утилитой командной строки gdisk.

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

root@mir:# dd if=/dev/zero of=/dev/sdz bs=512 count=1
root@mir:# blockdev --rereadpt /dev/sdz

Команда DD - очень опасна, т.к. получает прямой доступ к диску. Очень важно выбрать именно свою флешку, а не системный диск. Замените /dev/sdz на устройство сопоставленное своей флешке. Это опять же можно посмотреть в графической утилите "Диски".
Или можно сделать так: ls /dev/disk/by-label/
Т.е. устройство можно задать старым способом /dev/sdz либо новым способом, например: /dev/disk/by-label/STORE\x20N\x20GO.


Просмотреть привязки устройств можно еще и так:
root@mir:# ls -l /dev/disk/by-uuid/

Запускаем "Диски" (ранее известная как "Дисковая утилита"). Выбираем флешку и размечаем таблицу разделов GPT.

Диски. Диалог разметки таблицы разделов в GPT

Итак, таблица разделов GPT получена и появился первый: /dev/disk/by-id/usb-Verbatim_STORE_N_GO_07BB0074000000F-0:0-part1

Можно приступить к форматированию в универсальный дисковый формат UDF из командной строки, т.к. в графической утилите нет поддержки столь значимого формата.

root@mir:# mkudffs -b 512 --media-type=hd --utf8 /dev/disk/by-id/usb-Verbatim_STORE_N_GO_07BB0074000000F-0:0-part1
Обязательно, надо указывать опцию -b 512, иначе флешка не будет видна в Windows.
На этом можно остановиться, флешка готова к записи и чтению как в Ubuntu, так и Windows.

Тут я несколько поторопился. Флешка отказалась читаться и писаться в Windows. Причины выясняются ниже.
UDF флешка в Windows 7

Поэтому, я сделал следующее - отформатировал флешку в файловую систему UDF в системе Windows 7.

Длительное форматирование:
Z:\>format H: /fs:UDF

Быстрое форматирование:
Z:\>format H: /fs:UDF /q

В этом случае, файловая система UDF создалась. И флешка стала доступна в Windows на чтение и запись. В Ubuntu также.

Вот как её видит программа gdisk:

Disk /dev/sdb: 15646720 sectors, 7.5 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): Здесь много цифр
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 15646686
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048        15646686   7.5 GiB     0700  Microsoft basic data

В Ubuntu, эта флешка при автомонтировании, не приобретает метки, однако в Windows 7, метка сохраняется.

Всё, размер флешки позволяет переносить образ однослойного DVD.

Остаётся вопрос, в чём же причина несовместимости.
mkudffs, по умолчанию, делает размер сектора равным 2048, а Windows 7 - 512 байт. Так что, надо указывать обязательно опцию -b 512.

Замечена особенность, если флешку отформатированную в UDF в Linux, подключить в Windows 7 и попытаться изменить метку, со стандартной "LinuxUDF" на что-то своё, то флешка переходит в испорченное состояние с нулевым размером. Помогает переформатирование в Windows.


Что посмотреть на сайте, по теме форматирования:
1. Формат GPT, LVM http://gimmor.blogspot.com/2012/10/i-gpt-lvm-3tb-raid-microserver.html
2. О форматирование Blu-ray дисков: http://gimmor.blogspot.com/2012/10/blu-ray-ubuntu-linux.html


Комментариев нет: