AIX tar 错误:现在没有足够的可用内存

AIX tar 错误:现在没有足够的可用内存

我有一台运行 AIX 5.3 的 AIX P720 服务器。当运行tar -xvf /dev/rmt0从磁带(IBM TS3100 磁带库)提取时,出现以下错误:“ There is not enough memory available now”。当我尝试使用cp复制文件时也会发生这种情况。我显着增加了分页空间,但问题仍然存在。

答案1

Unix 下的磁带设备有点独特,因为它们是面向记录的而不是字节流。因此,写入磁带的每条记录必须是某个块大小(通常为 512 字节)的整数倍,并且必须在单次write调用中完成。每个磁带设备都有记录大小的下限和上限。同样,您必须在一次调用中读取记录read,并为其提供至少与实际记录大小一样大的缓冲区。如果您尝试读取的大小小于记录大小,Unix 将不会返回部分记录;它会返回ENOMEM错误。

选择记录大小取决于应用程序。 Tar 有一个b选项,调用阻断因子;值 20 表示 20*512 字节。较旧的操作系统将缓冲区限制为 64kbyte,因此流行的阻塞因子是 126,但更新、更快的磁带驱动器需要更大的最小记录大小。 cpio 使用该C选项来设置缓冲区大小。为了保持理智,通常最好使用dd给定的块大小(使用bs=ibs=选项)从磁带驱动器读取数据,然后将其通过管道传输到任何将解压数据的程序。

所以试试这个:

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

答案2

我想知道您是否可以在不尝试恢复的情况下列出文件。你可以尝试这样做tar -tvf /dev/rmt0

另外,您是否可以将输出捕获到文件而不是 STDOUT(您的屏幕)?

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

还有其他几个方面值得关注。它实际上是物理内存吗?如果是这样,您应该会使用 lsps -a 命令或使用 nmon(用于内存的选项 m)或 topas 等实用程序看到对分页空间的一些命中。

另一种想法是:这并不像 NCARGS 那样简单。根据记忆(请原谅双关语),这会给出不同的错误,例如“参数列表太长”。但可能值得使用以下方法进行检查: lsattr -El sys0 -a ncargs

其他一些选项是尝试在不同的 LPAR 上进行还原,假设您确实有另一个 LPAR 可以分配给它或另一个磁带驱动器。

答案3

这非常有趣:使用 dd 命令的错误块大小也会生成内存不足错误。

使用“dd”(磁盘转储)验证 Tivoli Storage Manager 磁带卷标签

要查看或更改磁带驱动器上的块大小,您可以使用:

lsattr -El rmt0 -a block_size

并改变它,例如变量,

chdev -l rmt0 -a block_size=0

但我希望您在成功恢复结束后将其更改回来。

相关内容