Ошибка AIX tar: сейчас недостаточно памяти.

У меня есть сервер AIX P720 с AIX 5.3. При запуске tar -xvf /dev/rmt0 извлечения из ленты (IBM TS3100 Tape Library) возникает следующая ошибка: « There is not enough memory available now ». Это также происходит, когда я пытаюсь использовать cp для копирования файлов. Я значительно увеличил пространство подкачки, но проблема сохраняется.

Мой первый раз здесь.

Интересно, можете ли вы перечислить файлы, даже не пытаясь восстановить их. Вы можете попробовать сделать это с tar -tvf /dev/rmt0

А также, возможно ли, что вы могли бы захватить вывод в файл, а не в STDOUT (ваш экран)?

 tar -tvf /dev/rmt0 1>/tmp/rest.out 2>/tmp/rest.err 

Несколько других областей, на которые нужно смотреть. Это на самом деле физическая память? Если это так, вы должны увидеть некоторые хиты в области подкачки с помощью команды lsps -a или с помощью утилиты, такой как nmon (опция m для памяти) или topas.

Еще одна мысль: это не так просто, как NCARGS. Из памяти (pardon pun) это даст другую ошибку, например, «список параметров слишком длинный». Но, возможно, стоит проверить использование: lsattr -El sys0 -a ncargs

Некоторые другие варианты – попробовать восстановить на другом LPAR, предполагая, что у вас есть другой LPAR, который может иметь тот или иной накопитель на магнитной ленте, назначенный ему.

Надеюсь, это поможет.

Ленточные устройства под Unix немного уникальны тем, что они ориентированы на запись, а не являются потоком байтов. Поэтому каждая запись, записанная на ленту, должна быть круглой, кратной некоторому размеру блока, обычно 512 байтов, и должна выполняться одним вызовом write . Каждое устройство ленты будет иметь нижнюю и верхнюю границы размера записи. Аналогично, вы должны прочитать запись в одном запросе на read , снабдив его буфером, который, по крайней мере, такой же, как и фактический размер записи. Если вы попробуете размер чтения, размер которого меньше размера записи, Unix не вернет частичную запись; он вернет ошибку ENOMEM .

Выбор размера записи зависит от приложения. У Tar есть опция b , вызывающая фактор блокировки ; значение 20 означает 20 * 512 байт. Старые операционные системы ограничили вас буферами в 64 байта, поэтому популярным блокирующим фактором было 126, но более новые и более быстрые ленточные накопители требуют даже больших минимальных размеров записей. Cpio использует параметр C для установки размера буфера. Чтобы сохранить здравый смысл, обычно лучше использовать dd для чтения данных с ленточного накопителя с использованием заданного размера блока (с опцией bs= или ibs= ), а затем передать его в любую программу, которая распаковывает данные.

Поэтому попробуйте следующее:

 dd if=/dev/rmt0 bs=1024k | tar xvf - 

Это довольно интересно: неправильный размер блока с помощью команды dd также создает ошибку из памяти.

Использование 'dd' (дисковый дамп) для проверки метки тонов Tivoli Storage Manager

Чтобы просмотреть или изменить размер блока на ленточном накопителе, вы можете использовать:

 lsattr -El rmt0 -a block_size 

И изменить его, например, на переменную,

 chdev -l rmt0 -a block_size=0 

Я бы хотел изменить его в конце успешного восстановления.