LINUX.ORG.RU
ФорумAdmin

монтирование внешнего винта (usb) при подключении к ubuntu


0

1

если комп работает без монитора и подключить к нему жесткий диск, он не монтируется автоматически (смотрю статус через ssh), хотя это происходит если сначала залогинится под юзером в GUI, иначе приходится делать sudo umount /dev/sdb1 /media/hdd

как сделать чтобы винт автоматически понтировался в /media/hdd если нет ни одного юзера работающего под GUI, то есть воткнул его в usb и он с ним можно работать?

и сразу тут же вопрос, как после монтирования выполнить свой скрипт, который будет сливать заранее указанные файлы на только что смонтированный диск?

было бы идеально если бы он ещё и авторазмонтировался после завершения выполнения скрипта :D

монтирование и авторазмонтирование получилось довольно просто, всего два правила.

вот ещё последний вопрос, надеюсь..

бекап (архив) делается каждый день, сохраняется в папке год_месяц/backup_год_месяц_день.tar.gz

каким образом удалять старые архивы чтобы получилось так что на каждый месяц оставался только один последний архив, например за май 2013_05/backup_2013_05_31.tar.gz за февраль 2013_05/backup_2013_02_28(29 високосный год или нет).tar.gz но за текущий месяц чтобы оставались все архивы. как только наступает следующий месяц чистится папка с предыдущим, оставляя только один архив.

на каком нибудь php я бы это смог сделать, но на баше я вообще хз как..

lolshchto
() автор топика
Ответ на: комментарий от lolshchto

на каком нибудь php я бы это смог сделать, но на баше я вообще хз как..

дак сделай

вот нужные магические слова: - cron, ls, tail, date.

anonymous
()
Ответ на: комментарий от lolshchto

предыдущий месяц узнаю вот так `date --date=«last month» «+%m»` а как узнать последний день в предыдущем месяце? в мануале нет примеров с использованием --date

lolshchto
() автор топика
Ответ на: комментарий от anonymous

крон не нужен. как и ls с tail мне нужно делать это по событию «подключили винт». ладно ещё ls, посмотреть файлы в папке, но что я должен делать с tail?

ладно, придётся подключать php.. хотя хотелось бы немного прокачать скилл скриптописание на bash :D

lolshchto
() автор топика
Ответ на: комментарий от lolshchto

Если крон не нужен, сделай скрипт с бесконечным циклом и мониторь появление внешнего блочного устройства, как только оно появляется в доступных девайсах монтируй его и сливай на него инфу, удалять старые бэкапы лучше всего с помощью find есть у него параметры отбора объектов по времени их создания.

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

сделал так

 cat /etc/udev/rules.d/10-backup-mount.rules 
SUBSYSTEM=="block", KERNEL=="sd[c-z][0-9]", ACTION=="add", RUN+="/bin/mount /dev/%k /media/backup1/"
SUBSYSTEM=="block", KERNEL=="sd[c-z][0-9]", ACTION=="add", RUN+="/media/srv/backups/go.sh"
SUBSYSTEM=="block", KERNEL=="sd[c-z][0-9]", ACTION=="remove", RUN+="/bin/umount /media/backup1/"

cat /media/srv/backups/go.sh

#!/bin/bash
log=backup.log

echo `date "+%F-%H:%M"` " going to make backup " >> $log
cd /media/srv/backups/
./rsync.sh permonth/ /media/backup1/my-backup/
/usr/bin/php -f deleteOldFiles.php 
echo `date "+%F-%R"` " backup is done " >> $log

cat cat /media/srv/backups/rsync.sh

#!/bin/bash
source=$1
target=$2
rsync -az --progress --delete $source $target

cat /media/srv/backups/deleteOldFiles.php

<?php
$prevDate=strtotime("previous month");
$prevMonth=date('m',$prevDate);
$prevYear=date('Y',$prevDate);
$numDays=cal_days_in_month(CAL_GREGORIAN,$prevMonth,$prevYear);

$toSaveDate=$prevYear.'-'.$prevMonth.'-'.$numDays;
$toSaveFile='permonth/'.$prevYear.'_'.$prevMonth.'/*'.$toSaveDate.'*';

$toDelete='*'.$prevYear.'-'.$prevMonth.'*';

$files=glob('permonth/'.$prevYear.'_'.$prevMonth.'/'.$toDelete);

foreach($files as $file){
if(!preg_match('~'.$toSaveDate.'~',$file)){
	unlink($file);
}
}

таким образом, при подключении внешнего hdd запускается копирование новых файлов и удаление старых, вроде как работает.

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