LINUX.ORG.RU

Многотомные архивы на сменных носителях

 ,


0

1

Есть архив в формате 7z, который делал с опцией -v1g, т.к. на одну болванку не влазит. И вдруг пробила ностальгия по временам MS-DOS, когда можно было делать многотомный архив на несколько дискет, и программа-архиватор сама спрашивала вставлять следующую/нужную дискетку для следующего тома — хотя бы при восстановлении, т.к. для архивации надо писать на DVD, что с точки зрения файловой системы процесс нетривиальный. Не хочется перегонять вместительный архив во временную папку — для того, чтобы потом его развернуть. Не хочется и писать костылеподобные скрипты для этого дела (если вообще они и возможны в данном случае). Ведь так удобней, и экономится дисковое пространство. В случае с тем же архиватором 7-zip при вставленном первом носителе выдаёт вот такую ошибку при тестировании:

askinfra@infra:/media/cdrom0$ 7za t "./vpupkin-20130808-001-dvd.7z.*"

7-Zip (A) [64] 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
p7zip Version 9.20 (locale=ru_RU.utf8,Utf16=on,HugeFiles=on,8 CPUs)

Processing archive: ./vpupkin-20130808-001-dvd.7z.001

Error: E_FAIL                

Processing archive: ./vpupkin-20130808-001-dvd.7z.002

Error: Can not open file as archive

Processing archive: ./vpupkin-20130808-001-dvd.7z.003

Error: Can not open file as archive

Processing archive: ./vpupkin-20130808-001-dvd.7z.004

Error: Can not open file as archive

Archives: 4

Archive Errors: 4
$
При перегоне же всех файлов, со всех носителей набора, во временную папку ошибок не происходит:
$ 7za t "./vpupkin-20130808-001-dvd.7z.*"

7-Zip (A) [64] 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
p7zip Version 9.20 (locale=ru_RU.utf8,Utf16=on,HugeFiles=on,8 CPUs)

Processing archive: ./vpupkin-20130808-001-dvd.7z.001

Testing     vpupkin-20130808-001/sda.img
Testing     vpupkin-20130808-001/sda.img.log
Testing     vpupkin-20130808-001/dev-sda.md5
Testing     vpupkin-20130808-001/sda.img.md5
Testing     vpupkin-20130808-001

Everything is Ok

Folders: 1
Files: 4
Size:       500107862318
Compressed: 1073741824
$ 

Но этого мало: он зачем-то держит открытыми не нужный в данный момент файл, а все тома архива сразу (по смещению видно, какие файлы уже не нужны, т.к. указатель стоит в самом конце файла тома, т.е. на позиции 0x40000000 Байт == 1GiB):

$ lsof -o | grep 7z
7za        8641          askinfra  cwd       DIR              253,3            131728948 /path0/to/vpupkin-20130808-001-from-ext
7za        8641          askinfra  rtd       DIR                8,2                    2 /
7za        8641          askinfra  txt       REG                8,2              2895985 /usr/lib/p7zip/7za
7za        8641          askinfra  mem       REG                8,2              1974848 /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache
7za        8641          askinfra  mem       REG                8,2              1977123 /usr/lib/locale/locale-archive
7za        8641          askinfra  mem       REG                8,2               131607 /lib/x86_64-linux-gnu/libc-2.13.so
7za        8641          askinfra  mem       REG                8,2               131577 /lib/x86_64-linux-gnu/libgcc_s.so.1
7za        8641          askinfra  mem       REG                8,2               131604 /lib/x86_64-linux-gnu/libm-2.13.so
7za        8641          askinfra  mem       REG                8,2              1967990 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.17
7za        8641          askinfra  mem       REG                8,2               131595 /lib/x86_64-linux-gnu/libpthread-2.13.so
7za        8641          askinfra  mem       REG                8,2               131610 /lib/x86_64-linux-gnu/ld-2.13.so
7za        8641          askinfra    0u      CHR              136,3        0t0         6 /dev/pts/3
7za        8641          askinfra    1u      CHR              136,3        0t0         6 /dev/pts/3
7za        8641          askinfra    2u      CHR              136,3        0t0         6 /dev/pts/3
7za        8641          askinfra    3r      REG              253,3 0x40000000 131728950 /path/to/vpupkin-20130808-001-dvd.7z.001
7za        8641          askinfra    4r      REG              253,3 0x40000000 131728951 /path/to/vpupkin-20130808-001-dvd.7z.002
7za        8641          askinfra    5r      REG              253,3 0x40000000 131728952 /path/to/vpupkin-20130808-001-dvd.7z.003
7za        8641          askinfra    6r      REG              253,3 0x40000000 131728953 /path/to/vpupkin-20130808-001-dvd.7z.004
7za        8641          askinfra    7r      REG              253,3 0x40000000 131728954 /path/to/vpupkin-20130808-001-dvd.7z.005
7za        8641          askinfra    8w     FIFO                0,8        0t0  17036066 pipe
7za        8641          askinfra    9r      REG              253,3 0x40000000 131728955 /path/to/vpupkin-20130808-001-dvd.7z.006
7za        8641          askinfra   10r      REG              253,3 0x40000000 131728956 /path/to/vpupkin-20130808-001-dvd.7z.007
7za        8641          askinfra   11r      REG              253,3 0x40000000 131728957 /path/to/vpupkin-20130808-001-dvd.7z.008
7za        8641          askinfra   12r      REG              253,3 0x40000000 131728958 /path/to/vpupkin-20130808-001-dvd.7z.009
7za        8641          askinfra   13r      REG              253,3 0x40000000 131728959 /path/to/vpupkin-20130808-001-dvd.7z.010
7za        8641          askinfra   14r      REG              253,3 0x40000000 131728960 /path/to/vpupkin-20130808-001-dvd.7z.011
7za        8641          askinfra   15r      REG              253,3 0x40000000 131728961 /path/to/vpupkin-20130808-001-dvd.7z.012
7za        8641          askinfra   16r      REG              253,3 0x40000000 131728962 /path/to/vpupkin-20130808-001-dvd.7z.013
7za        8641          askinfra   17r      REG              253,3 0x40000000 131728963 /path/to/vpupkin-20130808-001-dvd.7z.014
7za        8641          askinfra   18r      REG              253,3 0x15f00000 131728964 /path/to/vpupkin-20130808-001-dvd.7z.015
7za        8641          askinfra   19r      REG              253,3        0t0 131728965 /path/to/vpupkin-20130808-001-dvd.7z.016
7za        8641          askinfra   20r      REG              253,3        0t0 131728966 /path/to/vpupkin-20130808-001-dvd.7z.017
7za        8641          askinfra   21r      REG              253,3        0t0 131728967 /path/to/vpupkin-20130808-001-dvd.7z.018
7za        8641          askinfra   22r      REG              253,3        0t0 131728968 /path/to/vpupkin-20130808-001-dvd.7z.019
7za        8641          askinfra   23r      REG              253,3        0t0 131728969 /path/to/vpupkin-20130808-001-dvd.7z.020
7za        8641          askinfra   24r      REG              253,3        0t0 131728970 /path/to/vpupkin-20130808-001-dvd.7z.021
7za        8641          askinfra   25r      REG              253,3        0t0 131728971 /path/to/vpupkin-20130808-001-dvd.7z.022
7za        8641          askinfra   26r      REG              253,3        0t0 131728972 /path/to/vpupkin-20130808-001-dvd.7z.023
7za        8641          askinfra   27r      REG              253,3        0t0 131728973 /path/to/vpupkin-20130808-001-dvd.7z.024
7za        8641          askinfra   28r      REG              253,3        0t0 131728974 /path/to/vpupkin-20130808-001-dvd.7z.025
7za        8641          askinfra   29r      REG              253,3        0t0 131728975 /path/to/vpupkin-20130808-001-dvd.7z.026
7za        8641          askinfra   30r      REG              253,3        0t0 131728976 /path/to/vpupkin-20130808-001-dvd.7z.027
7za        8641          askinfra   31r      REG              253,3        0t0 131728977 /path/to/vpupkin-20130808-001-dvd.7z.028
7za        8641          askinfra   32r      REG              253,3        0t0 131728978 /path/to/vpupkin-20130808-001-dvd.7z.029
7za        8641          askinfra   33r      REG              253,3        0t0 131728979 /path/to/vpupkin-20130808-001-dvd.7z.030
7za        8641          askinfra   34r      REG              253,3        0t0 131728980 /path/to/vpupkin-20130808-001-dvd.7z.031
7za        8641          askinfra   35r      REG              253,3        0t0 131728981 /path/to/vpupkin-20130808-001-dvd.7z.032
7za        8641          askinfra   36r      REG              253,3        0t0 131728982 /path/to/vpupkin-20130808-001-dvd.7z.033
7za        8641          askinfra   37r      REG              253,3        0t0 131728983 /path/to/vpupkin-20130808-001-dvd.7z.034
7za        8641          askinfra   38r      REG              253,3        0t0 131728984 /path/to/vpupkin-20130808-001-dvd.7z.035
7za        8641          askinfra   39r      REG              253,3        0t0 131728985 /path/to/vpupkin-20130808-001-dvd.7z.036
7za        8641          askinfra   40r      REG              253,3        0t0 131728986 /path/to/vpupkin-20130808-001-dvd.7z.037
7za        8641          askinfra   41r      REG              253,3        0t0 131728987 /path/to/vpupkin-20130808-001-dvd.7z.038
7za        8641          askinfra   42r      REG              253,3 0x35a18796 131728988 /path/to/vpupkin-20130808-001-dvd.7z.039
$
Посоветуете архиватор с более продвинутой поддержкой многотомности?

★★★★★

Ответ на: комментарий от ananas

А его как заставить ждать?

Тот же 7za умеет читать stdin, или ему можно именованный пайп подсунуть, но в голову не приходит как скормить туда файл без EOF.

qux ()

Тут дело не столько в хитрости FS, сколько в том что архиватор знает что архив расположен на сменном носителе.

Вот отрывок из rar-ского хелпа

            Если тома создаются на сменных носителях, то после
            первого тома пользователю будет выдан запрос:

               Создать следующий том? Да/Нет/Все

            Вы должны сменить диск и ответить 'Да (Y)'. При ответе
            'Все (A)' все последующие тома будут создаваться без
            промежуточных пауз.

            При распаковке или тестировании многотомного архива нужно
            указывать только имя первого тома. Если следующего тома на
            диске нет, а диск этот сменный, то пользователю будет выдан
            запрос:

              Вставьте диск с <имя следующего тома>

TEX ★★ ()
Ответ на: комментарий от TEX

Ближе к истине. Спасибо. Попробую. Единственное, что немного напрягает в выхлопе aptitude show rar, так это This program is shareware and you must register it after 40 days of use.

Infra_HDC ★★★★★ ()
Ответ на: комментарий от Infra_HDC

man tar

-M, --multi-volume
create/list/extract multi-volume archive

sdio ★★★★★ ()
Ответ на: комментарий от TEX

Кстати, а как у rar-а дела с кодировками? Вот 7-zip полюбому в юникоде хранит имена файлов, независимо от оси и от локали. Так понимаю, у rar с этим могут быть проблемы. По крайней мере, то, что жмёт WinRAR с русскими именами, в Линуксе кракозябрится.

Infra_HDC ★★★★★ ()
Ответ на: комментарий от Infra_HDC

Кстати, а как у rar-а дела с кодировками?

Не буду врать. Точно не знаю, но есть некий ключ -SC<набор символов>[объекты], ни разу не пользовался

По крайней мере, то, что жмёт WinRAR с русскими именами, в Линуксе кракозябрится.

Возможно разжимаете чем то другим ? Вот файл с 866 кодировкой имени файла внутри архива.

#locale | grep LANG
LANG=ru_RU.UTF-8

# ls -l
итого 80
-rw-rw-r-- 1 root root 81202 Авг 21 11:04 Регламент взаимодействия.rar
#unrar l Регламент\ взаимодействия.rar

UNRAR 4.20 beta 3 freeware      Copyright (c) 1993-2012 Alexander Roshal

Archive Регламент взаимодействия.rar

 Name             Size   Packed Ratio  Date   Time     Attr      CRC   Meth Ver
-------------------------------------------------------------------------------
 Регламент взаимодействия.pdf    87825    81094  92% 26-11-07 14:40  .....A.   2A2D9EDC m3b 2.9
-------------------------------------------------------------------------------
    1            87825    81094  92%

#unrar e Регламент\ взаимодействия.rar

UNRAR 4.20 beta 3 freeware      Copyright (c) 1993-2012 Alexander Roshal


Extracting from Регламент взаимодействия.rar

Extracting  Регламент взаимодействия.pdf       OK
All OK
#ls -l
итого 168
-rw-rw-r-- 1 root root 87825 Ноя 26  2007 Регламент взаимодействия.pdf
-rw-rw-r-- 1 root root 81202 Авг 21 11:04 Регламент взаимодействия.rar

Другой вопрос, что не факт что rar вам поможет, я не помню точно, но разве у линукса есть вообще понятие о сменных носителях ? Ведь это же unixlike где всё есть файл.

TEX ★★ ()
Ответ на: комментарий от TEX

Где-то года три-четыре под линуксом с виндузовыми рарами не возюкался. Как-нибудь при случае надо попробовать. Спасибо за цитаты :-).

Infra_HDC ★★★★★ ()

архиватор с более продвинутой поддержкой многотомности

rar как это бы странно не звучало.

anonymous_sama ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.