Rate this post

Ленточные устройства на регулярной основе следует использовать для архивирования файлов или для передачи данных от одного сервера к другому. Как правило, ленточные устройства все подключены к Unix системе. Резервные копии следует выполнять на диски (например в облако) и ленточные устройства. В этой статье мы рассмотрим:n

  • Название ленточных устройств
  • Команды для управления лентами
  • Основные команды резервного копирования и восстановления с ленточных устройств

Зачем выполнять резервное копирование?n

  • Резервное копирование очень важно:
  • Возможность восстановления при отказе работы дисковой подсистемы
  • Случайное удаление файлов
  • Полное уничтожение сервера, в том числе уничтожение локальных резервных копий из-за пожара или других проблем.

Вы можете использовать архивы, основанные ленточном резервном копировании всего сервера и перемещать ленты за пределы серверной.nntape-formatnnКаждая лента устройство может хранить несколько файлов резервных копий. Ленточные резервные файлы создаются с помощью cpio, tar, dd, и тп. Тем не менее, накопитель на магнитной ленте может быть открыт и закрыт на запись данных различными программами. Вы можете хранить резервные копии на физической ленте. Между каждым файлом ленты есть «файл знак лента». Это используется для того, что бы указать где заканчивается один файл и начинается следующий. Используйте команду mt для позиционирования ленты (перемотки вперед или назад)nnКак данные хранятся на лентеnnhow-data-is-stored-on-a-tapennВсе файлы хранятся на ленте последовательно в архивах. Первый архив будет находится на физическом начале ленты и так далее.nnИменование ленточных устройств в Unixn

    n

  1. /dev/rmt/0 или /dev/rmt/1 или /dev/rmt/[0-127] : Обычное именование лент в Unix. Лента перематывается.
  2. /dev/rmt/0n : Так называются не перематываемые лентыe т.е. после использования ленты, не оставляет пленку в текущем состоянии для следующей команды.
  3. /dev/rmt/0b : Использование magtape интерфейс т.е. поведение BSD. Более читаемый различными ОС, такими как AIX, Windows, Linux, FreeBSD, и др.
  4. /dev/rmt/0l : Сжатие на низком уровне.
  5. /dev/rmt/0m : Сжатие на среднем уровне.
  6. /dev/rmt/0u :Сжатие на высоком уровне.
  7. /dev/rmt/0c : Установлена плотность сжатия.
  8. /dev/st[0-9] : конкретное имя Linux SCSI ленточного устройства.
  9. /dev/sa[0-9] : FreeBSD конкретное имя устройства SCSI ленты.
  10. /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

Пример ответа командыnnlinux-find-tape-devices-commandn

Команда 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