[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Libcdio-devel] libcdio treats a >4GB ISO-9660 file as 2 separate pa
From: |
Thomas Schmitt |
Subject: |
Re: [Libcdio-devel] libcdio treats a >4GB ISO-9660 file as 2 separate parts |
Date: |
Thu, 24 Aug 2017 18:27:27 +0200 |
Hi,
Pete Batard wrote:
> I don't believe this has anything with LFS.
This rather looks like lack of ISO 9660 level 3 support.
Does it have to be explicitely enabled in libcdio ?
I am somewhat clueless when reading
https://www.gnu.org/software/libcdio/libcdio.html#ISO-9660-Level-3
"Level 3 ISO-9660 allows non-contiguous files, useful if the file was
written in multiple packets with packet-writing software."
It has nothing to do with packet-writing, which is a SCSI/MMC thing.
Files larger than 4 GiB - 1 byte are represented by more than one directory
record. That's because the byte counter of a single record is unsigned 32 bit.
Each of the records of the file has the same name. Bit 7 of the File Flags
at BP 26 (= offset 25) tells that the next record belongs to the same file.
The data blocks governed by a directory record are called File Section or
Extent. See ECMA-119: 6.5, 9.1.6, 10.2, 10.3.
> You can download the problematic ISO (7.1 GB) by using the link below.
I can offer much leaner example downloads, which i made years ago.
The described problem is demonstrated by
https://dev.haiku-os.org/raw-attachment/ticket/8473/file_of_4gb.iso.bz2
with 25,183 bytes of download size. Add a handful of seconds of bunzip2
to get 4,297,523,200 bytes.
Content, as of xorriso -indev ... -find / -exec lsdl :
drwxr-xr-x 1 0 0 0 Apr 16 2012 '/'
-rw-r--r-- 1 1000 1000 4 Apr 16 2012 '/aaa'
-rw-r--r-- 1 1000 1000 4297064448 Apr 16 2012 '/file_of_4gb'
-rw-r--r-- 1 1000 1000 4 Apr 16 2012 '/zzz'
With ./example/isolist of my libcdio-TS-RockRidge-Fix branch:
d [LSN 50] 2048 /.
d [LSN 50] 2048 /..
- [LSN 2098231] 4 /aaa
- [LSN 55] 4294965248 /file_of_4gb
- [LSN 2097206] 2099200 /file_of_4gb
- [LSN 2098232] 4 /zzz
There are other variations in the attachment list of
https://dev.haiku-os.org/ticket/8473
--------------------------------------------------------------------
This is my advanced torture bench for letting BSDs and Solaris fail:
http://scdbackup.webframe.org/large.iso.bz2
(4470 bytes -> 4,329,897,984 bytes.)
Content, as of xorriso -indev ... -find / -exec lsdl :
drwxr-xr-x 1 0 0 0 May 6 2014 '/'
drwxr-xr-x 1 1000 1000 0 May 6 2014 '/my'
-rw-r--r-- 1 1000 1000 4329375744 May 6 2014 '/my/large_file'
-rw-r--r-- 1 1000 1000 6 May 6 2014 '/small_file'
And with ./example/isolist of my libcdio-TS-RockRidge-Fix branch:
d [LSN 2114034] 2048 /.
d [LSN 2114034] 2048 /..
d [LSN 2114036] 2048 /my
- [LSN 2114040] 6 /small_file
The directory tree is from a second session and located above block 2,114,016
= byte 4,329,504,768
TOC layout : Idx , sbsector , Size , Volume Id
ISO session : 1 , 32 , 2113977s , ISOIMAGE
ISO session : 2 , 2114016 , 25s , ISOIMAGE
Have a nice day :)
Thomas