LINUX.ORG.RU

lvm2. Удаление снапшотов старше 7 дней.

 ,


1

2

Хочу автоматизировать ротацию снапшотов lvm2. Предполагаю создавать ежедневно автоматически новый снапшот диска, а вот как удалить старые снапшоты, созданные старше, например, семи дней, сообразить не могу. Подскажите?


делаешь снапшоты с датой в названии (или с epoch 'date +%s'). ну а дальше сравниваешь все с текущей датой и удаляешь старые.

anonymous
()
Ответ на: комментарий от bl
  
#lvs
LV VG Attr LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Conv
  CRM          backup owi-aos--- 100,00g
  CRM-20-11-17 backup swi-a-s---  20,00g      CRM    0,00
  CRM-21-11-17 backup swi-a-s---  20,00g      CRM    0,00
  CRM-22-11-17 backup swi-a-s---  20,00g      CRM    0,00
  CRM-23-11-17 backup swi-a-s---  20,00g      CRM    0,00
  CRM-24-11-17 backup swi-a-s---  20,00g      CRM    0,00
  CRM-25-11-17 backup swi-a-s---  20,00g      CRM    0,00
danver
() автор топика

А зачем держать так много снапшотов ? Производительность не падает от такого количества ?
Я например делаю снапшот, снимаю бэкап и сразу убиваю снапшот.

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

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

danver
() автор топика

В снапшоте есть дата создания - используй ее. А еще лучше - делай инкрементальный бэкап. zbackup, например.

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

вот. наговнокодил

VG=backup
LV=$(lvs | grep "$VG" | grep -- "-wi-a-----" | awk '{print $1}' | egrep 'CRM-..-..-..')
for lv in ${LV} ; do 
# получаем дату 7 дней назад в unixtime формате
CS=$(date +%s --date="7 days ago")

# получаем дату из имени lv
DT=${lv/CRM-}

#CRM-24-11-17 -> 2017-11-24
DT=$(echo $S | sed 's/CRM-\([0-9][0-9]\)-\([0-9][0-9]\)-\([0-9][0-9]\)/20\3-\2-\1/')

# переводим дату в unixtime формат
CS=$(date +%s --date="$DT")

if [[ $? -ne 0 ]]; then continue ; fi ## если при конвертации даты произошла ошибка, пропускем этот LV.
if [[ "$DT" -le "$CS" ]]; 
then
    echo lvremove -y "${VG}/${lv}"
fi

done

bl ★★★
()
Последнее исправление: bl (всего исправлений: 1)
Ответ на: комментарий от bl

напутал с переменной в которой хранится дата снапшота. фикс

VG=backup
LV=$(lvs | grep "$VG" | grep -- "-wi-a-----" | awk '{print $1}' | egrep 'CRM-..-..-..')
for lv in ${LV} ; do 
# получаем дату 7 дней назад в unixtime формате
CS=$(date +%s --date="7 days ago")

# получаем дату из имени lv
DT=${lv/CRM-}

#CRM-24-11-17 -> 2017-11-24
DT=$(echo $S | sed 's/CRM-\([0-9][0-9]\)-\([0-9][0-9]\)-\([0-9][0-9]\)/20\3-\2-\1/')

# переводим дату в unixtime формат
CS=$(date +%s --date="$DT")

if [[ $? -ne 0 ]]; then continue ; fi ## если при конвертации даты произошла ошибка, пропускем этот LV.
if [[ "$DT" -le "$CS" ]]; 
then
    echo lvremove -y "${VG}/${lv}"
fi

done

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

для lvm-thin снапшоты не тормозят, т.к. их блоки находятся в одном пуле и lvm просто меняет указатели на них, а не копирует

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

лорчую нормальное именование снапшотов вместо ереси https://xkcd.com/1179/ и простой подход основанный на сортировке

Deleted
()
Ответ на: комментарий от bl

Сделал не совсем так, как в примере, но идею Вы мне подсказали хорошую. Спасибо!

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