Страницы

четверг, 4 октября 2012 г.

Blu-ray диски в Ubuntu Linux

Blu-ray диски в Ubuntu Linux


Что есть Blu-ray диск

Blu-ray (нар. блюрей) - круглый кусок многослойного пластика, запись информации на который осуществляется с помощью фиолетового (405 нм) лазера.
Бывают BD-R - для однократной записи. BD-RE - для многократной записи. BD-ROM - штампованный диск для чтения.
Blu-ray диски имеют повышенную емкость, в сравнении с CD,DVD. Обычный однослойный blu-ray диск - емкость 25 гигабайт. Двуслойный - 50 гигабайт. Трехслойный BDXL диск - 100 Гб. Четырехслойный 128 Гб.
Возможности хранения такого объема данных предопределили их преимущественное использование для хранения видео  высокого разрешения.

Основное отличие, на программном уровне, blu-ray диска от CD,DVD дисков - использование файловой системы UDF, против ISO9660 в CD/DVD. Universal Disk Format (UDF) версии 2.50 или 2.60.

Для наших применений эта оптическая технология подходит очень хорошо. 25 Гигабайт - серъезный объем для любительских целей.


Blu-ray в Ubuntu Linux

Поддержка Blu-ray дисков в Linux cуществует на базовом уровне. Т.е. доступны системные утилиты для записи образов. Однако графические утилиты менее распространены и платны.

В операционной системе Linux, в частности Ubuntu, существует пакет dvdrwtools для работы с DVD и Blu-ray дисками.

Для записи blu-ray диска будем использовать предварительно сформированный образ blu-ray диска.


Последовательность записи Blu-ray

1. Создание UDF-файла-образа
2. Форматирование UDF-файла-образа
3. Монтирование UDF-файла-образа в точку монтирования
4. Заполнение UDF-файла-образа содержимым
5. Отмонтирование UDF-файла-образа
6. Запись файла-образа на диск
7. Проверка корректности записанного образа

Файловая система UDF уже более менее знакома, применяется, например на флешках (см. Файловая система флешки).


Создание UDF-файла образа

Чтобы корректно сформировать файл-образ blu-ray, надо точно указать размер создаваемого файла. Т.к. 25 Гигабайт Blu-ray это такие же гигабайты как и у жестких дисков, т.е. приставка Гига означает 10^9 в международной системе единиц.
Итак размер файла должен быть: 25х1000х1000х1000 байт

Создадим папку для хранения образов дисков:

root@microserver:# mkdir /home/udfs/

Для создания файла используется команда truncate, она быстро работает, в отличии от dd.

root@microserver# truncate --size=25GB /home/udfs/archive.udf

Лучше так:
root@microserver# truncate --size=23610MiB /home/udfs/archive.udf

При создании образа Blu-ray необходимо учитывать точный размер доступного пространства на blu-ray диске. MiB - это 1024х1024 (старые мегабайты, а ныне мибибайты).
Удобно использовать небольшой SSD диск на 32-64 Гб для хранения образа и ускорения операций его заполнения.


Форматирование UDF-файла-образа

root@microserver:# mkudffs --utf8 /home/udfs/archive.udf

По умолчанию, устанавливается версия UDF2.01, выше нет возможности. Это может вызывать несомвестимость записанного диска, с рядом устройств. Но для наших целей - в принципе неважно.
Для поддержки русских имен лучше использовать опцию --utf8.
Для blu-ray диска также нет опции --media-type.


Монтирование UDF-Файла-образа. Петлевое монтирование

root@microserver:# mount -oloop,rw,users,sync,gid=iam,uid=iam /home/udfs/archive.udf /mnt/udf


Некоторые полезные опции монтирования, относящиеся к файловой системе udf.

       gid=   группа
       umask= Установить маску по умолчанию. Задается в восьмеричном формате.
       uid=  пользователь.

       iocharset Набор символов (кодировка).
       bs=  размер блока данных.

Например:
gid=iam,uid=iam,iocharset=utf8
Это позволит получать доступ к файловой системе не только суперпользователю, но и пользователю iam.



Заполнение

Копирование файлов для архивирования. Да, 25 Гигабайт еще поискать.
После копирования файлов - сброс остатков буфера.
root@microserver:# sync
sync - сброс внутреннего буфера.


Отмонтирование

root@microserver:# umount /mnt/udf


Запись файла-образа на диск Blu-ray

Скорость привода 1х - 36 Мбит/с - 4.5 МБайт/с.
Время записи Blu-Ray диска на скорости 1х - 90 минут (1.5 часа) для 25 Гб. Для 59 Гб.
180 минут (3 часа).
Однако, growisofs использует проверку записанных блоков, сразу после записи, и это удлиняет время записи до 2 раз. И в спецификации Blu-ray есть возможность неверно записанный блок записать в специальную запасную область, которая имеет размер минимум 256Мб.

root@microserver:# growisofs -speed=1 -Z /dev/sr0=/home/udfs/archive.udf

Чистый BD диск нуждается в предварительном форматировании и его выполняет growisofs, определив автоматически наличие неформатированного BD диска, либо отдельной командой dvd+rw-format (cм. Опции.).


Для быстрой записи можно указать в опции -speed скорость, которую поддерживает диск blu-ray. А также отключить проверки.


Долговечность Blu-ray

Долговечность Blu-ray это вопрос еще мало исследованный, однако есть несколько рекомендаций.
Использовать, по возможности, специальные архивные диски Archival Grade.
Использовать неорганические Blue-ray диски, вместо органических более дешевых LTH.
Использовать диски произведённые проверенными производителями - обычно из Японии (Panasonic).
Хранить в рекомендуемых условиях.

И да, не использовать Blu-ray для хранения оригиналов важных данных.

Опция. Форматирование Blu-ray диска

Непосредственное форматирование оптического диска выполняется командой dvd+rw-format.

Операция быстрая минута-две.

root@fobos:# dvd+rw-format /dev/dvd

/dev/dvd - устройство (привод BDR).

Чтобы переформатировать диск Blu-ray полностью (длительная операция - несколько часов).

root@fobos:# dvd+rw-format -blank /dev/dvd



Опция. Информация о Blu-ray диске

Например, при вставленном Blu-ray диске Verbatim BD-RE 2x  25 Gb.

root@mir:# dvd+rw-mediainfo /dev/sr0

Емкость указываемая при создании UDF-раздела GPT жесткого диска: 23610MiB.

INQUIRY:                [PIONEER ][BD-RW   BDR-207M][1.20]
GET [CURRENT] CONFIGURATION:
 Mounted Media:         43h, BD-RE
 Media ID:              CMCMAG/CN2
 Current Write Speed:   2.0x4495=8990KB/s
 Write Speed #0:        2.0x4495=8990KB/s
 Speed Descriptor#0:    00/12088319 R@2.0x4495=8990KB/s W@2.0x4495=8990KB/s
READ DISC INFORMATION:
 Disc status:           complete
 Number of Sessions:    1
 State of Last Session: complete
 Number of Tracks:      1
READ FORMAT CAPACITIES:
 formatted: 12088320*2048=24756879360
 00h(3000): 11826176*2048=24220008448
 30h(3000): 11826176*2048=24220008448
 30h(5000): 11564032*2048=23683137536
 30h(1000): 12088320*2048=24756879360
 31h(800): 12219392*2048=25025314816
READ TRACK INFORMATION[#1]:
 Track State:           complete
 Track Start Address:   0*2KB
 Free Blocks:           0*2KB
 Track Size:            12088320*2KB
FABRICATED TOC:
 Track#1  :             14@0
 Track#AA :             14@12088320
 Multi-session Info:    #1@0
READ CAPACITY:          12088320*2048=24756879360



Информация о неформатированном диске 50GB Panasonic в системе Linux

root@fobos:~# dvd+rw-mediainfo /dev/dvd
INQUIRY:                [PIONEER ][BD-RW   BDR-207M][1.20]
GET [CURRENT] CONFIGURATION:
 Mounted Media:         43h, BD-RE
 Media ID:                 MEI/T01
 Current Write Speed:   2.0x4495=8990KB/s
 Write Speed #0:        2.0x4495=8990KB/s
 Speed Descriptor#0:    00/24438783 R@2.0x4495=8990KB/s W@2.0x4495=8990KB/s
:-[ READ BD SPARE INFORMATION failed with SK=5h/MEDIUM NOT FORMATTED]: Wrong medium type
READ DISC INFORMATION:
 Disc status:           blank
 Number of Sessions:    1
 State of Last Session: empty
 "Next" Track:          1
 Number of Tracks:      1
READ FORMAT CAPACITIES:
 unformatted: 24438784*2048=50050629632
 00h(6000): 23652352*2048=48440016896
 30h(6000): 23652352*2048=48440016896
 30h(9000): 23259136*2048=47634710528
 30h(1000): 24307712*2048=49782194176
 31h(800): 24438784*2048=50050629632
READ TRACK INFORMATION[#1]:
 Track State:           blank
 Track Start Address:   0*2KB
 Free Blocks:           0*2KB
 Track Size:            24438784*2KB


Информация о форматированном диске 50GB Panasonic в системе Linux
Емкость для указания при создании UDF-раздела GPT жесткого диска: 46196MiB (48440016896).



root@fobos:~# dvd+rw-mediainfo /dev/dvd
INQUIRY:                [PIONEER ][BD-RW   BDR-207M][1.20]
GET [CURRENT] CONFIGURATION:
 Mounted Media:         43h, BD-RE
 Media ID:                 MEI/T01
 Current Write Speed:   2.0x4495=8990KB/s
 Write Speed #0:        2.0x4495=8990KB/s
 Speed Descriptor#0:    00/23652351 R@2.0x4495=8990KB/s W@2.0x4495=8990KB/s
READ DISC INFORMATION:
 Disc status:           complete
 Number of Sessions:    1
 State of Last Session: complete
 Number of Tracks:      1
READ FORMAT CAPACITIES:
 formatted: 23652352*2048=48440016896
 00h(6000): 23652352*2048=48440016896
 30h(6000): 23652352*2048=48440016896
 30h(9000): 23259136*2048=47634710528
 30h(1000): 24307712*2048=49782194176
 31h(800): 24438784*2048=50050629632
READ TRACK INFORMATION[#1]:
 Track State:           complete
 Track Start Address:   0*2KB
 Free Blocks:           0*2KB
 Track Size:            23652352*2KB
FABRICATED TOC:
 Track#1  :             14@0
 Track#AA :             14@23652352
 Multi-session Info:    #1@0
READ CAPACITY:          23652352*2048=48440016896


Строка READ CAPACITY отражает доступную пользователю емкость, в байтах.


Экспериментальная опция. Использование свободного раздела на жестком диске для образа Blu-ray

У меня сделан свободный раздел на жестком диске, который я могу использовать как дополнительный загрузочный том, либо как дополнительное место.
В этот раз, я его отформатирую в UDF. Его размер около 25 Гигабайт.
Итак, для начала выясняю точные размеры разделов и дисков Blu-ray. Они отличаются.
Раздел жесткого диска (у меня /dev/sda3), размер 24 996 625 920 байт.

Диск Blu-ray Verbatim BD-RE 2x 25 Gb (медиа-код CMCMAG-CN2-000), 24 756 879 360 байт, 12 088 320 секторов по 2048 байт.

Диск Blu-ray Mirex BD-RE 2x 25 Gb (медиа-код PHILIP-W02-000), размер 24 220 008 448 байт, 11826176 секторов по 2048 байт.

Итак, все размеры отличаются.
При наличии чистого жесткого диска, можно создать раздел точно под размер Blu-ray диска. В результате получиться точная байтовая копия Blu-ray диска.
А вот с существующим разделом отличного размера, могут быть трудности и они есть. И вообще, на работающей системе, манипуляция с разделами - крайне опасная операция, чреватая потерей данных.

Для удобства на новом жестком диск лучше использовать разметку GPT, это позволяет создать до 34 разделов. Можно создать разделы, по размеру соответствующие разным blu-ray дискам, dvd-дискам, cd-дискам.
Т.к. встроенное приложение disks в gnome shell не позволяет точно задать размер раздела, то будем использовать команду gdisk - аналог fdisk, но для работы с GPT дисками.

Т.к. нам требуется создать раздел размером 24 756 879 360 байт, то для получения числа 512-байтных секторов, воспользуемся расчетом.

24 756 879 360 / 512 = 48353280 секторов по 512 байт.

При создании раздела в GPT, он выравнивается по границе 2048. Если это первый раздел, то начальный сектор нашего раздела будет 2048.
Чтобы получить, точный адрес сектора конца раздела, надо произвести расчёт следующего вида:
48353280 + 2048 - 1.
Т.к. нумерация секторов начинается с нуля.
И после создания и записи таблицы GPT с таким разделом, мы получим в точности совпадающий раздел по объему с Verbatim BD-RE 25GB.
И программа "Диски" (disks) в Gnome Shell покажет точный размер нового раздела в байтах.

Попробуем создать файловую систему UDF по размеру, соответствующую blu-ray диску, в данном случае - Verbatim. 12088320 секторов.

root@mir:# mkudffs --utf8 -b 2048 /dev/sda3

start=0, blocks=16, type=RESERVED 
start=16, blocks=3, type=VRS 
start=19, blocks=237, type=USPACE 
start=256, blocks=1, type=ANCHOR 
start=257, blocks=16, type=PVDS 
start=273, blocks=1, type=LVID 
start=274, blocks=12087789, type=PSPACE 
start=12088063, blocks=1, type=ANCHOR 
start=12088064, blocks=239, type=USPACE 
start=12088303, blocks=16, type=RVDS 
start=12088319, blocks=1, type=ANCHOR


Файловая система создана. Видно, что последний блок в точности попадает в размер.

Чтобы задать метки для UDF-раздела, видимые в Nautilus, можно использовать опции --lvid и --vid.

# mkudffs --utf8 -b 2048 --lvid=BDRE25GB --vid=BDRE25GB /dev/sda5

где /dev/sda5 - раздел, размеров 23610MiB.


Примонтируем её в точку /mnt/udf:
root@mir:# mount -t udf -o rw,users,gid=iam,uid=iam /dev/sda3 /mnt/udf

Теперь её можно заполнить простым копирование в программе файлового менеджера Nautilus.

root@mir:# sync && umount /dev/sda3

И запись UDF-раздела на оптический диск Verbatim:
root@mir:# growisofs --speed=2 -Z /dev/sr0=/dev/sda3
Ждем 180 минут, т.к. growiso пишет с проверками. Их также можно отключить.

Проверяем записанный диск в Windows 7, и в Nautilus.

Что-же касается диск Mirex, значение его емкости остается для меня непонятным, надо смотреть спецификации. Однако, можно тоже самое проделать и для диска Mirex, просто цифры будут отличаться. Вот что будет с записью раздела verbatim на меньший диск mirex? Программа записи по исчерпании емкости выдаст ошибку записи.

Однако, есть интересная опция у growisofs, наследовання от genisoimage, позволяющая задать количество записываемых секторов. -stream-media-size, что позволит записать кусок раздела, при условии, что в этом куске создана udf-файловая система. Т.е. размер файловой системы меньше раздела на диске. Подробнее man genisoimage. Пока не проверял, но что-то подсказывает, что это верный путь. Попробовал, пока не получается задать эту опцию. И остается единственный способ - это раздел, который равен размеру blu-ray диска.



Аналогичным образом можно поступить и с DVD дисками и спокойно записывать их потом простой командой из консоли, без подготовки промежуточного файла-образа.


Ресурсы

. http://ru.wikipedia.org/wiki/Blu-ray_Disc
. http://fy.chalmers.se/~appro/linux/DVD+RW/Blu-ray/

4 комментария:

Sergey (Hank) комментирует...

От меня вам благодарность. Записываю по вашей схеме уже второй диск. Правда в первом случае не заполнил на 100%, а сейчас дописать не получается. Пробовал через brasero, k3b - ничего не получилось.

Sergey (Hank) комментирует...

25 октября. Ситуация не меняется. Всё та же инструкция. Теперь важно сохранить ссылку и информацию по записи, пока не сдвинется с места возможность без проблем записывать диски.

Sergey (Hank) комментирует...

Вот цитирую коносльный вывод, последние строчки с ошибкой. Но после этого диск читается и открывается. Вроде файлы записаны и на месте.

24210505728/24756879360 (97.8%) @1.7x, remaining 1:04 RBU 100.0% UBU 52.2%
:-[ WRITE@LBA=b47400h failed with SK=5h/END OF USER AREA ENCOUNTERED ON THIS TRACK]: Input/output error
:-( write failed: Input/output error
/dev/sr0: flushing cache
/dev/sr0: closing track
/dev/sr0: closing session
:-[ CLOSE SESSION failed with SK=5h/INVALID FIELD IN CDB]: Input/output error
/dev/sr0: reloading tray

Анонимный комментирует...

С мультисессией можно как-нибудь писать? Чтобы бэкап на BD пополнять постепенно.