Я щитаю, что очень хорошо, когда машина делает то, что сказали; но при этом способна проверить банальности и "банально гибка". Этой самой "банальной гибкости" не хватает. Да, она - раб, и будет делать то, что сказано. Но от нее нужно больше, она должна выбирать когда петь, а когда говорить. И поэтому я люто хочу, чтоб либо /bin/cp научился говорить: "Хозяин, места нету расчисть, - я допишу", либо хочу замену. ДаЭ!!!1111
-
и правда)
-
И да, меня отпустило и возникла мысль о реализации сабжевой фичи.
Во-первых, cp не виноват, да. Он должен копировать, вот и пусть.
Во-вторых демон нужен. Он будет висеть и посматривать: "А не запущен ли cp?", и если запущен, то будет смотреть в /proc/$pid_of_cp/cmdline, оттуда парсить путь назначения, делать df путь_назначения, и, если вдруг ОЙ. - стопарим cp, вываливаем нотификатор "Ололо места нету!" и продолжает чекать наличие фри спейса, как только достаточно (проверяет исходный размер и уже скопированный) - снимает cp с паузы.
Или это до сих пор продолжается, омг... )
Внимание вопрос: Как один процесс может поставить на паузу другой процесс?
-
-
Как один процесс может поставить на паузу другой процесс?
зачем???
всё делается элегантно. Пишется sh функция cp вызывающая /bin/cp только тогда когда есть место на разделе для копируемого файла/файлов и ругающегося на недостаточное место когда его не хватает не вызываю уже /bin/cp
если не лень пиши, задача не трудная. только вот хитрозадость одна (остальное я знаю как реализовать) - как вычеслить на какое блочное устройство будет производиться запись что бы высчитать место именно на нем?
-
-
Нефти тебе. тыщщу
А с местом, можно схитрить. Сделать врапер над cp, который будет смотреть путь назначения перед запуском процесса копирования. Ну таким образом мы все узнаем.
-
-
Ну правильно. сначала смотрим куда копируем. высчитываем там место и т.д.
Только вот как узнать на какое устройство копируем что бы считать место я хз :(
-
-
Видимо мы не допонимаем друг друга. Мой вариант.
Вот, скажем, хотим копировать нечто в /tmp/.
Делаем df /tmp/
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 42931632 12882596 27868216 32% /
после смотрим размер исходных данных.
а этого достаточно, чтоб подытожить хватит нам места или нет.
-
Наверное как-то так: берём абсолютный путь до места куда копируем, затем получаем список блочных устройств на которые можно писать (банально можно распарсить df), затем начинаем сравнивать абсолютный путь до места копирования с точками монтирования блочных устройств. Итого: мы пишем на то устройство где совпадение максимально. У меня есть два сомнения: не знаю как развернуть абсолютный путь с учётом симлинков и не знаю что будет если у тебя имеется стековая файловая система.
-
-
df -h папка | tail -n 1 | awk '{print $4}'
спасибо жуйке
-
-
да, это я и имел в виду, только сначала сам написал, а потом твой коммент увидел
-
да и кст, в жуйке уже посоветовали бросить велосипедо-строение, - есть же rsync и curl. ага.
можно расслабиться и почитать маны :)
-
-
не разу не велосипед...
не катит ни курл не rsync несколько не то делают, хотя и близко
-
а вот симлинки, могут подпортить мед. Но для начала можно и без поддержки симлинков реализовать.
а что есть стековая фс? вкратце, как влияет на сабж
-
-
Это aufs, mhddfs и иже с ними. Позволяют смонтировать несколько блочных устройств в единое нечто и как-то с ним работать.
-
а как быть с софтом использующим cp ? =) пересобирать с вызовом этой функции?
или сабж только для ручного копирования?
-
-
mv /bin/cp /bin/cpp
а на место /bin/cp положить скриптик. не?
-
-
можно, но что-то мне говорит, что не всё гладко будет
-
-
интересно что будет не гладко?
-
добавляешь в скрипт волшебный ключ который позволяет следить за заполненностью дисков и всё.
-
По вашему алгоритму проверка ведь будет однократной, да?
Ну и что получится, если запустите первый, а затем сразу второй cp, каждый по гигу скажем, на свободное место гига в полтора?
-
-
кончится если место то что-то не запишется =) собственно для постоянной проверки проще cp патчить чем простыми скриптами
-
-
Собстно постоянная проверка все тормознет ;)
Не Ъ это все. cp должно просто копировать, а не печься о free space
-
из жуйка подсказывает @rakoth: что-то типа kill -STOP ${pidof cp}
-
-
А чисто из интереса: как его резюмить?
-
-
хороший вопрос.
-
И прогрессбарчики красивые чтоб рисовались, да.
-
-
вроде где-то был патч для cp для сих целей, на в апстрим не вошло. погугли по этому поводу
-
-
use pv )
-
использовать pv
-
-
Ну pv и что? Знаешь патч cp, который использует pv?
-
-
по предложенному muhas`ом варианту
-
-
Какбе самому чтоле написать? Я простую копирялку писал на основе cp, но весь фунционал cp я ниосилил написать.
-
-
нечто вроде такого внесте в .bashrc или другой .шеллrc
cppv() { cp $@ | pv ; }
-
-
Этот вариант не работает.
-
-
Сорри. Не проверил сам =)
исправленный вариант =) увиденный минус - теряются права, но можно извратиться
1
2
3
4
5
6
7
|
cppv() {
if [ -d $2 ]; then
pv $1 > $2/$1
else
pv $1 > $2
fi }
|
|
|
|
Последние посты
|
|
Последние комментарии
|
|
Изменения
|
|
Черновики (все)
|
|
Избранное (всё)
|
|
|