LINUX.ORG.RU
ФорумAdmin

BackUp. Скрип для монтирования отчуждаемых носителей

 , , ,


0

2

Всем привет. Имеется такая задача.

Дано:

  • сервер под управление ОС Линукс
  • 2 внешних HDD

Нужно написать скрипт который будет в указанное время монтировать один из 2х HDD(второй диск лежит в надежном месте), копировать указанные файлы, после этого диск отмонтировать. Затем диск в сервере физически меняется и процедура повторяется.

Загвоздка у меня произошла в том, что я не могу понять как мне находить нужный диск и соответственно раздел на диске /dev/sdXY? Допустим я знаю объем или UUID. А дальше всё просто. mount найденного раздела, копирование данных, затем umount, замена диска.


#!/bin/bash

DISK=200G # Допустим я знаю объем или UUID

B=«/mnt/backup»

[ «#backup» != «cat /etc/crontab | grep "#backup" | awk -F" " {'print $13'}» ] && echo ‘0 23 * * 1-6 root $(sh backup.sh) >> /dev/null 2>&1 #backup’ >> /etc/crontab

fdisk -l > q && cat q | grep $DISK | awk -F" " {‘print $1’}

result=$?

echo $result

if [ $result -eq 0 ]

then

[ ! -d $B ] && mkdir -p $B

DEV=fdisk -l > q && cat q | grep $DISK | awk -F" " {'print $1'}

mount $DEV $B

result=$?

if [ $result -eq 0 ]

then

echo "$DEV mounted on $B"


 ####  Здесь твой backup скрипт!!!

    echo "Backup выполнен `date`!"

    umount /mnt/backup

    exit 1

else

echo "$DEV umounted on $B"

fi

else

echo «$DEV is not valid»

exit 1

fi

demo13
()
Последнее исправление: demo13 (всего исправлений: 2)
 Привет!

Нахождение диска по объёму не всегда правильно, так как может быть и другой диск с таким же объёмом. Поэтому лучше находить по UUID.

Скрипт можно посмотреть здесь:

http://togusak.ddnss.de/server/backup.sh

Не пишу сюда, так как не все знаки отoбражаются корректно.

Скрипт проверил, нужно только внести параметры своих дисков из fdisk -l.

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

Может кто подскажет. Написал такую строку

lsblk -o +uuid,name | grep -E "34E030F1E030BB46|7CACFADDACFA913E" | awk {'print $7'}

И задался вопросом, а без grep это можно сделать?

lsblk -o +uuid,name | awk '/34E0/ {print $7}'
bredis
() автор топика
Ответ на: комментарий от bredis

и да, awk в этой ситуации вообще может некорректно работать, если раздел не примонтирован, т.к. $7 будет пустым (точнее он будет со смещением на другой столбец).

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

Вот выхлоп

[root@xxx ~]# lsblk -o +uuid,name
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
                                                UUID                                 NAME
sda           8:0    0     7T  0 disk                                                sda
└─sda1        8:1    0     7T  0 part /files    7c83d929-8446-4e81-8be1-ca4fb9127f88 sda1
sdb           8:16   0 893,8G  0 disk                                                sdb
├─sdb1        8:17   0   255M  0 part /boot/efi 8BEA-9E08                            sdb1
├─sdb2        8:18   0  31,4G  0 part [SWAP]    58737899-ab3f-4096-abac-4434f25421c8 sdb2
├─sdb3        8:19   0  23,8G  0 part /         dc86399b-67cf-4698-b273-b308149bcc21 sdb3
└─sdb4        8:20   0 838,2G  0 part /var      a0009db3-075c-4674-a244-61ea9c6d9e76 sdb4
sdc           8:32   0   3,6T  0 disk                                                sdc
└─sdc1        8:33   0   3,6T  0 part           7CACFADDACFA913E                     sdc1
nvme0n1     259:0    0   1,5T  0 disk                                                nvme0n1
└─nvme0n1p1 259:1    0   1,5T  0 part /database 17be7270-32c9-4d53-9f4c-2c5108bfbc3d nvme0n1p1
[root@xxx ~]# lsblk -o +uuid,name | awk '$8 ~ "^(34E030F1E030BB46|7CACFADDACFA913E)$" {print $7}'
[root@xxx ~]# lsblk -o +uuid,name | awk '/34E0|7CAC/ {print $7}'
7CACFADDACFA913E
[root@xxx ~]#
bredis
() автор топика
Последнее исправление: bredis (всего исправлений: 2)