LINUX.ORG.RU

склеивание вайлов, если нет доп. места.


0

0

может, кому пригодится

s=0; for i in $(seq 0 15); do n=$(printf %02d $i); f=$(find /dsk/skognen/image.iso/ -iname "*mkv.$n"); d=$(losetup -s -f $f); l=$(blockdev --getsize $d); if [ $l != 0 ]; then echo "$s $l linear $d 0"; fi; s=$(($s+$l)); done | dmsetup create mdvd


здесь ищутся файлы наподобие
/dsk/skognen/image.iso/dvd0/Spartacus.mkv.00
.....
/dsk/skognen/image.iso/dvd1/Spartacus.mkv.08

которые затем закольцовываются в блочные устройства. Попутно скрипт создаёт таблицу для device-mapper'а со строками вида
$start $liength linear $device $offset(=0)

ну, и dmsetup отображает все куски в одно устройство
/dev/mapper/mdvd

если мало кольцевых устройств, не беда:
for i in $(seq 0 255); do if [ ! -e /dev/loop$i ]; then mknod /dev/loop$i b 7 $i ; fi ; done

после просмотра "файла" вернём на место
dmsetup remove mdvd; for i in $(seq 0 15); do losetup -d /dev/loop$i; done

такие пироги. может, есть какие готовые тулы?

★★

Круто, вот за это мы и любим unix-way

manntes ★★
()

Раз уж вызывали losetup -f, то надо запоминать имена loopback устройств для losetup -d. И что будет в случае, если размер файла не кратен 512 байт?

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

1) естественно, но мне уже было лениво. вообще, я бы переписал это на Си по-хорошему.

2) будет жопа. надо добивать до 512-байтной границы ещё при распиливании файла или непосредственно после. :)

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