Связаться по:
vkarabedyants Telegram Viber

Блог о системном администрировании серверов и сайтов

Установка, настройка программного обеспечения Linux, Windows операционных систем

15 полезных Linux команд для управления ленточными библиотеками

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

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

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

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

Вы можете использовать архивы, основанные ленточном резервном копировании всего сервера и перемещать ленты за пределы серверной.

tape-format

Каждая лента устройство может хранить несколько файлов резервных копий. Ленточные резервные файлы создаются с помощью cpio, tar, dd, и тп. Тем не менее, накопитель на магнитной ленте может быть открыт и закрыт на запись данных различными программами. Вы можете хранить резервные копии на физической ленте. Между каждым файлом ленты есть «файл знак лента». Это используется для того, что бы указать где заканчивается один файл и начинается следующий. Используйте команду mt для позиционирования ленты (перемотки вперед или назад)

Как данные хранятся на ленте

how-data-is-stored-on-a-tape

Все файлы хранятся на ленте последовательно в архивах. Первый архив будет находится на физическом начале ленты и так далее.

Именование ленточных устройств в Unix

  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 ленты, которые могут быть извлечены по окончанию записи.

Как просмотреть установленные SCSI ленточные устройства?

Используйте следующие команды

## Linux  ##
lsscsi
lsscsi -g

## IBM AIX ##
lsdev -Cc tape
lsdev -Cc adsm
lscfg -vl rmt*

## Solaris Unix ##
cfgadm –a
cfgadm -al
luxadm probe
iostat -En

## HP-UX Unix ##
ioscan Cf
ioscan -funC tape
ioscan -fnC tape
ioscan -kfC tape

Пример ответа команды

linux-find-tape-devices-command

Команда mt

В системе Linux и Unix-подобных, команда mt используется для управления операциями ленточного накопителя, например, найти статус или файлы на ленте или писать контрольные знаки на ленте.  Синтаксис:

mt -f /tape/device/name operation

Настройка среды

Вы можете установить переменную оболочки TAPE. Это путь ленточного накопителя. По умолчанию (если эта переменная не установлена) является /dev/nsa0 на FreeBSD. Может изменить с помощью опции -f передается команде mt, как описано ниже.

 ## Добавить в скрипт запуска системы ##
TAPE=/dev/st1 #Linux
TAPE=/dev/rmt/2 #Unix
TAPE=/dev/nsa3 #FreeBSD
export TAPE

Показать состояние tape/drive

mt status  #Use default 
mt -f /dev/rmt/0  status #Unix
mt -f /dev/st0 status #Linux 
mt -f /dev/nsa0 status #FreeBSD
mt -f /dev/rmt/1 status #Unix

Так же вы можете использовать цикл, что бы просмотреть все ленточные устройства в системе

for d in 0 1 2 3 4 5
do
 mt -f "/dev/rmt/${d}" status
done

Перемотка ленты

mt rew
mt rewind
mt -f /dev/mt/0 rewind
mt -f /dev/st0 rewind

Извлечение ленты

mt off
mt offline
mt eject
mt -f /dev/mt/0 off
mt -f /dev/st0 eject

Стереть ленту

mt erase
mt -f /dev/st0 erase  #Linux 
mt -f /dev/rmt/0 erase #Unix

Перемотка Кассеты

Если возникают, ошибки чтения, нужно очистить стример, а затем повторите попытку следующим образом:

mt retension
mt -f /dev/rmt/1 retension #Unix
mt -f /dev/st0 retension #Linux

Запись n метки EOF в текущей позиции ленты

mt eof
mt weof
mt -f /dev/st0 eof

Перемотка вперед на определенное количество меток EOF

Лента позиционируется на первом блоке следующего файла, т.е. ленты будет позиционировать на первом блоке

mt fsf
mt -f /dev/rmt/0 fsf
mt -f /dev/rmt/1 fsf 1

Перемотка назад на определенное количество меток EOF

mt bsf
mt -f /dev/rmt/1 bsf
mt -f /dev/rmt/1 bsf 1

Основные команды резервного копирования.

Резервирование директории

tar cvf /dev/rmt/0n /etc
tar cvf /dev/st0 /etc

Восстановление из архива

tar xvf /dev/rmt/0n -C /path/to/restore
tar xvf /dev/st0 -C /tmp

Просмотр проверка содержимого бэкапа

mt -f /dev/st0 rewind; dd if=/dev/st0 of=-

## tar format ##
tar tvf {DEVICE} {Directory-FileName}
tar tvf /dev/st0
tar tvf /dev/st0 desktop
tar tvf /dev/rmt/0 foo > list.txt

Копирование разделов dump or ufsdump

 ## Unix backup c0t0d0s2 partition ##
ufsdump 0uf /dev/rmt/0  /dev/rdsk/c0t0d0s2

## Linux backup /home partition ##
dump 0uf /dev/nst0 /dev/sda5
dump 0uf /dev/nst0 /home

## FreeBSD backup /usr partition ##
dump -0aL -b64 -f /dev/nsa0 /usr

Восстановление разделов командой  ufsrestore или restore

## Unix ##
ufsrestore xf /dev/rmt/0
## Unix interactive restore ##
ufsrestore if /dev/rmt/0

## Linux ##
restore rf /dev/nst0
## Restore interactive from the 6th backup on the tape media ##
restore isf 6 /dev/nst0

## FreeBSD restore ufsdump format ##
restore -i -f /dev/nsa0

Запись в начало ленты

## This will overwrite all data on tape ##
mt -f /dev/st1 rewind

### Backup home ##
tar cvf /dev/st1 /home

## Offline and unload tape ##
mt -f /dev/st0 offline

Восстановление с начала ленты

mt -f /dev/st0 rewind
tar xvf /dev/st0
mt -f /dev/st0 offline

Начать запись после последнего архива

## This will kee all data written so far ##
mt -f /dev/st1 eom

### Backup home ##
tar cvf /dev/st1 /home

## Unload ##
mt -f /dev/st0 offline

Начать запись после второго архива

## To wrtite after tar number 2 (should be 2+1)
mt -f /dev/st0 asf 3
tar cvf /dev/st0 /usr

## asf equivalent command done using fsf ##
mt -f /dev/sf0 rewind
mt -f /dev/st0 fsf 2

Восстановить архив 2

mt -f /dev/st0 asf 3
tar xvf /dev/st0
mt -f /dev/st0 offline

Как проверить резервные копии на ленте созданные с помощью tar?

Важно регулярно проверять резервные копии, что бы понимать, что система функционирует правильно.

#!/bin/bash
# A UNIX / Linux shell script to backup dirs to tape device like /dev/st0 (linux)
# This script make both full and incremental backups.
# You need at two sets of five  tapes. Label each tape as Mon, Tue, Wed, Thu and Fri.

LOGBASE=/root/backup/log

# Backup dirs; do not prefix /
BACKUP_ROOT_DIR="home sales"

# Get todays day like Mon, Tue and so on
NOW=$(date +"%a")

# Tape devie name
TAPE="/dev/st0"

# Exclude file
TAR_ARGS=""
EXCLUDE_CONF=/root/.backup.exclude.conf

# Backup Log file
LOGFIILE=$LOGBASE/$NOW.backup.log

# Path to binaries
TAR=/bin/tar
MT=/bin/mt
MKDIR=/bin/mkdir

# ------------------------------------------------------------------------
# Excluding files when using tar
# Create a file called $EXCLUDE_CONF using a text editor
# Add files matching patterns such as follows (regex allowed):
# home/vivek/iso
# home/vivek/*.cpp~
# ------------------------------------------------------------------------
[ -f $EXCLUDE_CONF ] && TAR_ARGS="-X $EXCLUDE_CONF"

#### Custom functions #####
# Make a full backup
full_backup(){
	local old=$(pwd)
	cd /
	$TAR $TAR_ARGS -cvpf $TAPE $BACKUP_ROOT_DIR
	$MT -f $TAPE rewind
	$MT -f $TAPE offline
	cd $old
}

# Make a  partial backup
partial_backup(){
	local old=$(pwd)
	cd /
	$TAR $TAR_ARGS -cvpf $TAPE -N "$(date -d '1 day ago')" $BACKUP_ROOT_DIR
	$MT -f $TAPE rewind
	$MT -f $TAPE offline
	cd $old
}

# Make sure all dirs exits
verify_backup_dirs(){
	local s=0
	for d in $BACKUP_ROOT_DIR
	do
		if [ ! -d /$d ];
		then
			echo "Error : /$d directory does not exits!"
			s=1
		fi
	done
	# if not; just die
	[ $s -eq 1 ] && exit 1
}

#### Main logic ####

# Make sure log dir exits
[ ! -d $LOGBASE ] && $MKDIR -p $LOGBASE

# Verify dirs
verify_backup_dirs

# Okay let us start backup procedure
# If it is Monday make a full backup;
# For Tue to Fri make a partial backup
# Weekend no backups
case $NOW in
	Mon)	full_backup;;
	Tue|Wed|Thu|Fri) 	partial_backup;;
	*) ;;
esac > $LOGFIILE 2>&1

Оставить комментарий

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.