Ленточные устройства на регулярной основе следует использовать для архивирования файлов или для передачи данных от одного сервера к другому. Как правило, ленточные устройства все подключены к Unix системе. Резервные копии следует выполнять на диски (например в облако) и ленточные устройства. В этой статье мы рассмотрим:n
- Название ленточных устройств
- Команды для управления лентами
- Основные команды резервного копирования и восстановления с ленточных устройств
Зачем выполнять резервное копирование?n
- Резервное копирование очень важно:
- Возможность восстановления при отказе работы дисковой подсистемы
- Случайное удаление файлов
- Полное уничтожение сервера, в том числе уничтожение локальных резервных копий из-за пожара или других проблем.
Вы можете использовать архивы, основанные ленточном резервном копировании всего сервера и перемещать ленты за пределы серверной.nnnnКаждая лента устройство может хранить несколько файлов резервных копий. Ленточные резервные файлы создаются с помощью cpio, tar, dd, и тп. Тем не менее, накопитель на магнитной ленте может быть открыт и закрыт на запись данных различными программами. Вы можете хранить резервные копии на физической ленте. Между каждым файлом ленты есть «файл знак лента». Это используется для того, что бы указать где заканчивается один файл и начинается следующий. Используйте команду mt для позиционирования ленты (перемотки вперед или назад)nnКак данные хранятся на лентеnnnnВсе файлы хранятся на ленте последовательно в архивах. Первый архив будет находится на физическом начале ленты и так далее.nnИменование ленточных устройств в Unixn
- n
- /dev/rmt/0 или /dev/rmt/1 или /dev/rmt/[0-127] : Обычное именование лент в Unix. Лента перематывается.
- /dev/rmt/0n : Так называются не перематываемые лентыe т.е. после использования ленты, не оставляет пленку в текущем состоянии для следующей команды.
- /dev/rmt/0b : Использование magtape интерфейс т.е. поведение BSD. Более читаемый различными ОС, такими как AIX, Windows, Linux, FreeBSD, и др.
- /dev/rmt/0l : Сжатие на низком уровне.
- /dev/rmt/0m : Сжатие на среднем уровне.
- /dev/rmt/0u :Сжатие на высоком уровне.
- /dev/rmt/0c : Установлена плотность сжатия.
- /dev/st[0-9] : конкретное имя Linux SCSI ленточного устройства.
- /dev/sa[0-9] : FreeBSD конкретное имя устройства SCSI ленты.
- /dev/esa0 : FreeBSD конкретное имя устройства SCSI ленты, которые могут быть извлечены по окончанию записи.
n
Как просмотреть установленные SCSI ленточные устройства?
Используйте следующие командыn
## Linux ##nlsscsinlsscsi -gnn## IBM AIX ##nlsdev -Cc tapenlsdev -Cc adsmnlscfg -vl rmt*nn## Solaris Unix ##ncfgadm –ancfgadm -alnluxadm probeniostat -Ennn## HP-UX Unix ##nioscan Cfnioscan -funC tapenioscan -fnC tapenioscan -kfC tape
Команда mt
В системе Linux и Unix-подобных, команда mt используется для управления операциями ленточного накопителя, например, найти статус или файлы на ленте или писать контрольные знаки на ленте. Синтаксис:n
mt -f /tape/device/name operation
Настройка среды
Вы можете установить переменную оболочки TAPE. Это путь ленточного накопителя. По умолчанию (если эта переменная не установлена) является /dev/nsa0 на FreeBSD. Может изменить с помощью опции -f передается команде mt, как описано ниже.n
## Добавить в скрипт запуска системы ##nTAPE=/dev/st1 #LinuxnTAPE=/dev/rmt/2 #UnixnTAPE=/dev/nsa3 #FreeBSDnexport TAPE
Показать состояние tape/driven
mt status #Use default nmt -f /dev/rmt/0 status #Unixnmt -f /dev/st0 status #Linux nmt -f /dev/nsa0 status #FreeBSDnmt -f /dev/rmt/1 status #Unix
Так же вы можете использовать цикл, что бы просмотреть все ленточные устройства в системеn
for d in 0 1 2 3 4 5ndon mt -f "/dev/rmt/${d}" statusndone
Перемотка ленты
mt rewnmt rewindnmt -f /dev/mt/0 rewindnmt -f /dev/st0 rewind
Извлечение ленты
mt offnmt offlinenmt ejectnmt -f /dev/mt/0 offnmt -f /dev/st0 eject
Стереть ленту
mt erasenmt -f /dev/st0 erase #Linux nmt -f /dev/rmt/0 erase #Unix
Перемотка Кассеты
Если возникают, ошибки чтения, нужно очистить стример, а затем повторите попытку следующим образом:n
mt retensionnmt -f /dev/rmt/1 retension #Unixnmt -f /dev/st0 retension #Linux
Запись n метки EOF в текущей позиции ленты
mt eofnmt weofnmt -f /dev/st0 eof
Перемотка вперед на определенное количество меток EOF
Лента позиционируется на первом блоке следующего файла, т.е. ленты будет позиционировать на первом блокеn
mt fsfnmt -f /dev/rmt/0 fsfnmt -f /dev/rmt/1 fsf 1
Перемотка назад на определенное количество меток EOF
mt bsfnmt -f /dev/rmt/1 bsfnmt -f /dev/rmt/1 bsf 1
Основные команды резервного копирования.
Резервирование директорииn
tar cvf /dev/rmt/0n /etcntar cvf /dev/st0 /etc
Восстановление из архива
tar xvf /dev/rmt/0n -C /path/to/restorentar xvf /dev/st0 -C /tmp
Просмотр проверка содержимого бэкапа
mt -f /dev/st0 rewind; dd if=/dev/st0 of=-nn## tar format ##ntar tvf {DEVICE} {Directory-FileName}ntar tvf /dev/st0ntar tvf /dev/st0 desktopntar tvf /dev/rmt/0 foo > list.txt
Копирование разделов dump or ufsdump
## Unix backup c0t0d0s2 partition ##nufsdump 0uf /dev/rmt/0 /dev/rdsk/c0t0d0s2nn## Linux backup /home partition ##ndump 0uf /dev/nst0 /dev/sda5ndump 0uf /dev/nst0 /homenn## FreeBSD backup /usr partition ##ndump -0aL -b64 -f /dev/nsa0 /usr
Восстановление разделов командой ufsrestore или restore
## Unix ##nufsrestore xf /dev/rmt/0n## Unix interactive restore ##nufsrestore if /dev/rmt/0nn## Linux ##nrestore rf /dev/nst0n## Restore interactive from the 6th backup on the tape media ##nrestore isf 6 /dev/nst0nn## FreeBSD restore ufsdump format ##nrestore -i -f /dev/nsa0
Запись в начало ленты
## This will overwrite all data on tape ##nmt -f /dev/st1 rewindnn### Backup home ##ntar cvf /dev/st1 /homenn## Offline and unload tape ##nmt -f /dev/st0 offline
Восстановление с начала ленты
mt -f /dev/st0 rewindntar xvf /dev/st0nmt -f /dev/st0 offline
Начать запись после последнего архива
## This will kee all data written so far ##nmt -f /dev/st1 eomnn### Backup home ##ntar cvf /dev/st1 /homenn## Unload ##nmt -f /dev/st0 offline
Начать запись после второго архива
## To wrtite after tar number 2 (should be 2+1)nmt -f /dev/st0 asf 3ntar cvf /dev/st0 /usrnn## asf equivalent command done using fsf ##nmt -f /dev/sf0 rewindnmt -f /dev/st0 fsf 2
Восстановить архив 2
mt -f /dev/st0 asf 3ntar xvf /dev/st0nmt -f /dev/st0 offline
Как проверить резервные копии на ленте созданные с помощью tar?nnВажно регулярно проверять резервные копии, что бы понимать, что система функционирует правильно.n
#!/bin/bashn# A UNIX / Linux shell script to backup dirs to tape device like /dev/st0 (linux)n# This script make both full and incremental backups.n# You need at two sets of five tapes. Label each tape as Mon, Tue, Wed, Thu and Fri.nnLOGBASE=/root/backup/lognn# Backup dirs; do not prefix /nBACKUP_ROOT_DIR="home sales"nn# Get todays day like Mon, Tue and so onnNOW=$(date +"%a")nn# Tape devie namenTAPE="/dev/st0"nn# Exclude filenTAR_ARGS=""nEXCLUDE_CONF=/root/.backup.exclude.confnn# Backup Log filenLOGFIILE=$LOGBASE/$NOW.backup.lognn# Path to binariesnTAR=/bin/tarnMT=/bin/mtnMKDIR=/bin/mkdirnn# ------------------------------------------------------------------------n# Excluding files when using tarn# Create a file called $EXCLUDE_CONF using a text editorn# Add files matching patterns such as follows (regex allowed):n# home/vivek/ison# home/vivek/*.cpp~n# ------------------------------------------------------------------------n[ -f $EXCLUDE_CONF ] && TAR_ARGS="-X $EXCLUDE_CONF"nn#### Custom functions #####n# Make a full backupnfull_backup(){n local old=$(pwd)n cd /n $TAR $TAR_ARGS -cvpf $TAPE $BACKUP_ROOT_DIRn $MT -f $TAPE rewindn $MT -f $TAPE offlinen cd $oldn}nn# Make a partial backupnpartial_backup(){n local old=$(pwd)n cd /n $TAR $TAR_ARGS -cvpf $TAPE -N "$(date -d '1 day ago')" $BACKUP_ROOT_DIRn $MT -f $TAPE rewindn $MT -f $TAPE offlinen cd $oldn}nn# Make sure all dirs exitsnverify_backup_dirs(){n local s=0n for d in $BACKUP_ROOT_DIRn don if [ ! -d /$d ];n thenn echo "Error : /$d directory does not exits!"n s=1n fin donen # if not; just dien [ $s -eq 1 ] && exit 1n}nn#### Main logic ####nn# Make sure log dir exitsn[ ! -d $LOGBASE ] && $MKDIR -p $LOGBASEnn# Verify dirsnverify_backup_dirsnn# Okay let us start backup proceduren# If it is Monday make a full backup;n# For Tue to Fri make a partial backupn# Weekend no backupsncase $NOW inn Mon) full_backup;;n Tue|Wed|Thu|Fri) partial_backup;;n *) ;;nesac > $LOGFIILE 2>&1