14

It's embarrassing to imagine that there are no intelligent tools on Linux to create UDF images, similar to makeisofs, but I have yet to find any. The tool genisoimage does work for creating video disk images, but there is no equivalent for general data. Is the Linux toolset really so deficient when it comes to optical disc tools?

I've already seen this and the accepted answer simply isn't sufficient.

8

linux-udf

Seems to be the project you're looking for, linux-udf project. The project is mentioned in the Linux Kernel's udf.txt file.

Looking through their sourceforge site the download is called udftools. Searching within my Fedora 19's package repository I found that exact package.

$ yum search udf | grep "^udf"
udftools.x86_64 : Linux UDF Filesystem userspace utilities
udftools-debuginfo.x86_64 : Debug information for package udftools

Contents of the RPM.

$ rpm -ql udftools 
/usr/bin/cdrwtool
/usr/bin/mkudffs
/usr/bin/pktsetup
/usr/bin/udffsck
/usr/bin/wrudf
/usr/share/doc/udftools-1.0.0b3
/usr/share/doc/udftools-1.0.0b3/AUTHORS
/usr/share/doc/udftools-1.0.0b3/COPYING
/usr/share/doc/udftools-1.0.0b3/ChangeLog
/usr/share/man/man1/cdrwtool.1.gz
/usr/share/man/man8/mkudffs.8.gz
/usr/share/man/man8/pktsetup.8.gz

Looking through the tools listed above.

cdrwtool

The cdwrtool command can perform certain actions on a CD-R, CD-RW, or DVD-R device. Mainly these are blanking the media, formating it for use with the packet-cd device, and applying an UDF filesystem.

mkudffs

mkudffs is used to create a UDF filesystem on a device (usually a disk). device is the special file corresponding to the device (e.g /dev/hdX). blocks-count is the number of blocks on the device. If omitted, mkudffs automagically figures the file system size.

pktsetup

Pktsetup is used to associate packet devices with CD or DVD block devices, so that the packet device can then be mounted and potentially used as a read/write filesystem. This requires kernel support for the packet device, and the UDF filesystem.

  See: http://packet-cd.sourceforge.net/ ⟨⟩

Formatting a UDF DVD

This tutorial shows how you can format a DVD using UDF, titled: How to format a DVD with UDF.

Example

$ sudo mkudffs --media-type=dvd /dev/dvd
trying to change type of multiple extents

$ sudo dvd+rw-format /dev/dvd
* DVD±RW/-RAM format utility by , version 6.1.
* 4.7GB DVD+RW media detected.
* formatting 9.5\

$ sudo mkudffs /dev/dvd
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=2294573, type=PSPACE 
start=2294847, blocks=1, type=ANCHOR 
start=2294848, blocks=239, type=USPACE 
start=2295087, blocks=16, type=RVDS 
start=2295103, blocks=1, type=ANCHOR 

Determine media's type

$ sudo dvd+rw-mediainfo /dev/dvd

Making an ISO

I think you're too quickly dismissing genisoimage. If you look through the man page for it there is this switch:

-udf   Include UDF filesystem support in the generated filesystem image.  
       UDF support is currently in alpha status and for this reason, it is 
       not possible to create UDF-only images.  UDF data structures are 
       currently coupled to  the  Joliet  structures,  so  there are many 
       pitfalls with the current implementation. There is no UID/GID 
       support, there is no POSIX permission support, there is no support 
       for symlinks.  Note that UDF wastes the space from sector ~20 to 
       sector 256 at  the beginning of the disc in addition to the space 
       needed for real UDF data structures.

Example

$ genisoimage -udf -o image.iso R/
I: -input-charset not specified, using utf-8 (detected in locale settings)
Using SPLIT000.HTM;1 for  R/x86_64-redhat-linux-gnu-library/2.13/plyr/html/splitter_a.html (splitter_d.html)
Using LIST_000.HTM;1 for  R/x86_64-redhat-linux-gnu-library/2.13/plyr/html/list_to_vector.html (list_to_dataframe.html)
Using INDEX000.HTM;1 for  R/x86_64-redhat-linux-gnu-library/2.13/plyr/html/indexed_array.html (indexed_df.html)
...
...
Using TEST_002.R;1 for  R/x86_64-redhat-linux-gnu-library/2.13/plyr/tests/test-split-labels.r (test-split-data-frame.r)
Total translation table size: 0
Total rockridge attributes bytes: 0
Total directory bytes: 24576
Path table size(bytes): 134
Max brk space used 43000
1141 extents written (2 MB)

Now if we check the resulting .iso file.

$ file im.iso 
image.iso: # UDF filesystem data (version 1.5) 'CDROM                           '

To confirm that the image.iso is truly a UDF filesystem within we can mount it just to double check.

$ sudo mount -o loop image.iso /mnt/
mount: /dev/loop0 is write-protected, mounting read-only

Now if see how it was mounted via the mount command.

$ mount | grep '/mnt'
/home/saml/image.iso on /mnt type udf (ro,relatime,utf8)

References

  • 3
    Thanks. Still incredibly primitive compared to what I'd expect for a 10-year-old format, but your answer seems pretty canonical so I'll have to deal with it for now. – Vector Gorgoth Jan 5 '14 at 12:59

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.