Видео ролики бесплатно онлайн

Смотреть красотки видео

Официальный сайт pharma-24 24/7/365

Смотреть видео бесплатно

WeLinux.ru

23.04.09 22:45

kampfusbekeПишем большие файлы на UDF

Многие (знакомые со старой проблемой с UDF) думают, что под Линуксом на UDF нельзя писать файлы размером более 4ГБ или даже 1ГБ. Во времена HD-рипов это не очень-то и приятно... Но на самом деле, это давно уже не так ;) Нам нужны: пакет udftools и загруженые модули udf и loop. Я написал скриптик, который автоматически создает и маунтит образ UDF нужного размера (DVD+9 и DVD-9, как и DVD+5 и DVD-5 на самом деле слегка различаются в размере!), остается только записать на него нужные файлы и прожечь сам образ.

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: теперь скрипт "переспрашивает" при неверном вводе переменной
+6
kampfusbeke23.04.09 22:50# +0
интересно, а почему после 81 строчки не нумеруются?
xT23.04.09 23:16# +1
Плюсанул.
Перепишите скрипт так чтобы при некорректных ответах (не y или не n) он не завершался, а пользователю предлагалось ввести ответ еще раз. Циклы мб... а то не совсем тру выходит =)
kampfusbeke23.04.09 23:28# +1
да, я тоже вот это подумал... надо бы переделать это в do-while, когда время будет :)
kampfusbeke23.04.09 23:41# +0
или, собственно, можешь подсказать что-нибудь лучше do-while? я в скриптинге пока еще новичек ;)
xT23.04.09 23:45# +0
dialog ? =)
kampfusbeke24.04.09 01:37# +1
так, это сделали. следущая проблема - хочу, чтобы проверялось, существует ли каталог, можно ли туда писать, пустой ли он (это для монтирования). если он не пустой - чтобы так-же и создавался. как все это решить по-отдельности - раскурил, но чтобы все вместе, в одном цикле и по-элегантнее - пока не вкуриваю...
zivot_je_cudo24.04.09 13:06# +1
[ -e $dir -a -d $dir -a -w $dir -a -x $dir ] || echo "Каталог не верен";
[ -z `ls $dir` ] && echo "Каталог пуст" || echo "Каталог не пуст";
Вместе в одном цикле элегантно не будет. Так не получится возвращать ошибку, описывающую, что именно не так с каталогом. Лучше подробнее:
[ -e $dir ] || echo "Каталог не существует";
[ -d $dir ] || echo "Это не каталог";
[ -w $dir ] || echo "Запись в каталог не доступна";
[ -x $dir ] || echo "Нет прав на просмотр каталога";
[ -z `ls $dir` ] || echo "Каталог не пуст";
Что значит "если он не пустой - чтобы так-же и создавался"?
kampfusbeke24.04.09 14:48# +1
проглючило :) в смысле, если он не существует, чтобы он создался. как это все по-отдельности решить, я уже разобрался, но надо будет подумать, как всю проблему решить по-элегантнее ;)
буду думать поздно вечером опять ;)
zivot_je_cudo24.04.09 16:55# +0
И у меня вновь не совсем элегантное решение..)
[ -e $dir ] || (mkdir $dir || echo "Не могу создать каталог");
zivot_je_cudo24.04.09 09:46# +1
Все совсем давно не так о.о Скрипт для консоли, конечно, хорош, но k3b позволяет писать UDF без ограничения в 4гб.
kampfusbeke24.04.09 14:43# +0
совсем давно - это когда? в к3б под кде4 - может быть, не проверял.
в к3б под кде3 была функция записи в удф, но на деле с большими файлами ничего не выходило.
nvbn24.04.09 15:32# +0
С svn для kde4 работает, для kde3 - портит диск(во всяком случае портило)
stanislav24.04.09 17:01# +2
Хмм.. лежит стопочка дисков с hd-рипами, записанными в k3b. Ни одной болванки не закосячило.
stanislav24.04.09 17:02# +1
k3b из третьих кед, имел ввиду.
kampfusbeke24.04.09 17:10# +0
какая версия к3б?
хд-рипы, я так понимаю, больше 4-х гиг и записаны на юдф?
stanislav24.04.09 17:17# +1
1.0.5
больше 4-х гиг
а как бы посмотреть уже записанные диски - udf или нет? чтобы уж точно, а не по памяти.
kampfusbeke24.04.09 22:04# +0
ну, если файлы больше 4г, то должно быть удф. стандартные исо9660 так не могут ;)
а вообще, крусэйдер показывает, например, там-же где показывается свободное место. lesspipe кроме всего прочего это тоже показывает (less /dev/sr0).
если стоит lshw, можно сделать lshw |grep medium -A 4
stanislav25.04.09 05:28# +0
Проверил - да, udf.
Kraplax24.04.09 17:24# +0
viva la KDE4! :D

Top блогов (все)
Топ пользователей Топ блогов
Топ пользователей Топ блогов
Top пользователей (все)
Топ пользователей Топ блогов
В сети: Yuko

Новенькие: XXL, pavlikbk, safon4ik, syslik, Svental
welinux.ru
Идея сайта exelens; Движок 0byte, разработчик nvbn; Дизайн - Astramak

Смотреть видео онлайн

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн