kampfusbeke — Пишем большие файлы на UDF
Многие (знакомые со старой проблемой с UDF) думают, что под Линуксом на UDF нельзя писать файлы размером более 4ГБ или даже 1ГБ. Во времена HD-рипов это не очень-то и приятно... Но на самом деле, это давно уже не так ;) Нам нужны: пакет udftools и загруженые модули udf и loop. Я написал скриптик, который автоматически создает и маунтит образ UDF нужного размера (DVD+9 и DVD-9, как и DVD+5 и DVD-5 на самом деле слегка различаются в размере!), остается только записать на него нужные файлы и прожечь сам образ.
Записываем этот скриптик в /usr/local/bin/makeudf (или как захотите) и делаем ему chmod +x. После чего просто запускаем его из терминала и следуем указаниям ;) Если у кого-нибудь есть дельные советы по улучшению скрипта - добро пожаловать в комментарии :)
EDIT: кстати, спасибо grigio за его решение этой проблемы, которое и сподвигло меня на написание этого скрипта.
EDIT2: кстати, cdrecord выдает при записи этих исошников кучу ошибок, не обращайте на это внимания! Записаные болванки без проблем и полностью читаются как в Линуксе, так и в Винде!
EDIT3: теперь скрипт "переспрашивает" при неверном вводе переменной
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
UDFPATH=$HOME yesorno=blah type=blah echo -e "By default the udf image will be placed into your home directory. \n Do you want to enter an alternative one? (Enter y or n)" while [ $yesorno != y -a $yesorno != n ]; do read yesorno if [ $yesorno != y -a $yesorno != n ]; then echo "Wrong entry, please enter 'y' or 'n'" fi done if [ $yesorno == y ]; then echo "Please enter the directory you want to use: " read UDFPATH if [ -d $UDFPATH ]; then echo "Using $UDFPATH" else echo "Creating $UDFPATH" && mkdir -v $UDFPATH fi fi if [ $yesorno == n ]; then echo "Using default directory" fi if [ -e $UDFPATH/udf.iso ]; then mv $UDFPATH/udf.iso $UDFPATH/udf.iso.bak-`date +%y.%m.%d-%H.%M` && echo "udf.iso already exists! Backing up..." fi echo -e "Please enter your type of disk: dvd5p, dvd5m, dvd9p or dvd9m:\n(5/9 stand for normal/double layer disk and p/m for +/-)" while [ $type != dvd5p -a $type != dvd5m -a $type != dvd9p -a $type != dvd9m ]; do read type if [ $type != dvd5p -a $type != dvd5m -a $type != dvd9p -a $type != dvd9m ]; then echo "Wrong entry, please enter one of types from above" fi done if [ $type == dvd5p ]; then echo "Creating a 4,7 GB DVD+R image..." dd if=/dev/zero of=$UDFPATH/udf.iso bs=1024 count=4590208 fi if [ $type == dvd5m ]; then echo "Creating a 4,7 GB DVD-R image..." dd if=/dev/zero of=$UDFPATH/udf.iso bs=1024 count=4596992 fi if [ $type == dvd9p ]; then echo "Creating a 8,5 GB DVD+R image..." dd if=/dev/zero of=$UDFPATH/udf.iso bs=1024 count=8347648 fi if [ $type == dvd9m ]; then echo "Creating a 8,5 GB DVD-R image..." dd if=/dev/zero of=$UDFPATH/udf.iso bs=1024 count=8343424 fi mkudffs $UDFPATH/udf.iso echo -e "UDF image created in $UDFPATH/udf.iso. Want to mount it right now? (Make sure udf and loop modules are loaded)" yesorno=blah while [ $yesorno != y -a $yesorno != n ]; do read yesorno if [ $yesorno != y -a $yesorno != n ]; then echo "Wrong entry, please enter 'y' or 'n'" fi done if [ $yesorno == y ]; then echo "Please enter the directory you want to use for mounting: " read MOUNTPATH if [ $UDFPATH = $MOUNTPATH ]; then echo "You can't mount the image to the directory it exists in!" && exit 0 echo -e " Mount it yourself with 'sudo mount -o loop,user,uid=`id -u` -t udf $UDFPATH/udf.iso targetdir\'" echo " Afterwards copy your files, unmount the image and burn the dvd." echo -e " For burning you may just use 'cdrecord -eject -dao -dev=/dev/sr0 $UDFPATH/udf.iso'\n (the path to your DVD burner may vary!)" fi if [ -d $MOUNTPATH ]; then echo "Using $MOUNTPATH" USERID=`id -u` sudo mount -o loop,user,uid=$USERID -t udf $UDFPATH/udf.iso $MOUNTPATH echo "Copy your files, umount the image and burn the dvd." echo -e "For burning you may just use 'cdrecord -eject -dao -dev=/dev/sr0 $UDFPATH/udf.iso'\n(the path to your DVD burner may also vary)"; else echo "Creating $MOUNTPATH..." && mkdir -v $MOUNTPATH USERID=`id -u` sudo mount -o loop,user,uid=$USERID -t udf $UDFPATH/udf.iso $MOUNTPATH echo "Copy your files, umount the image and burn the dvd." echo -e "For burning you may just use 'cdrecord -eject -dao -dev=/dev/sr0 $UDFPATH/udf.iso'\n(the path to your DVD burner may also vary)"; fi fi if [ $yesorno == n ]; then echo -e "All right, then mount it yourself with 'sudo mount -o loop,user,uid=`id -u` -t udf $UDFPATH/udf.iso targetdir'\nAfterwards copy your files, unmount the image and burn the dvd." echo -e "For burning you may just use 'cdrecord -eject -dao -dev=/dev/sr0 $UDFPATH/udf.iso'\n(the path to your DVD burner may also vary)" fi |
Записываем этот скриптик в /usr/local/bin/makeudf (или как захотите) и делаем ему chmod +x. После чего просто запускаем его из терминала и следуем указаниям ;) Если у кого-нибудь есть дельные советы по улучшению скрипта - добро пожаловать в комментарии :)
EDIT: кстати, спасибо grigio за его решение этой проблемы, которое и сподвигло меня на написание этого скрипта.
EDIT2: кстати, cdrecord выдает при записи этих исошников кучу ошибок, не обращайте на это внимания! Записаные болванки без проблем и полностью читаются как в Линуксе, так и в Винде!
EDIT3: теперь скрипт "переспрашивает" при неверном вводе переменной