我正在尝试使用 lftp 将文件从 unix(UTF-8) ftp 到大型机 (gdg)。因此,以下命令适用于较小的文件。大型机要求文件处于 ASCII 模式。当文件变大时,我认为 ftp 被分解并且 lftp 中的 ascii 选项无法正常工作。寻找一些解决方案。
命令:
lftp -c "open -u user,password -p 21 server.example.ORG; site LRECL=10200; put -a /home/user/example_2018-02-01-09-46-05.txt -o 'C00000.000000.0000(+1)';bye"
错误:
put: cannot seek on data source
问题:大型机空间不足。
解决方案:基于以下答案。我减少了LRECL=750以节省空间,ascii模式能够再次工作。
z/OS 和大多数(所有?)分布式操作系统之间的一个区别是需要指定数据集将占用多少空间。 可能存在一个默认值,即"较小"数据集不超过,而"较大"数据集不超过。
尝试指定 SITE 命令以分配更多空间。
您可能需要与大型机存储管理员联系,以查看是否存在应指定为 SITE 命令的 DATACLAS。 DATACLAS包括空间分配等。
如果没有 DATACLAS,通常人们可以很好地了解文件中存在的记录数量,并且可以计算出需要多少块、轨道或圆柱体。
通常,您可以利用系统确定的块大小,其中 z/OS 为您计算最佳块大小。 现代 DASD 上应使用的最大块大小为 27998 字节,相当于半个轨道的大小。 您的 LRECL 是 10200。 27998/10200 是 2.74,因此 2 条记录将适合一个块,4 条记录适合轨道。 那里有相当多的浪费空间。
如果您的文件中有 1000 条记录,您可以指定...
pri=250 sec=25 tracks
。作为 SITE 命令的一部分。 这将在主要分配中提供 1000 条记录,并可能为 slop 提供 15 条辅助分配。 不能保证获得辅助分配,因此通常最好尝试为整个数据集指定足够大的主要分配。 对于包含 100,000 条记录的大型文件,您可以指定...
pri=1700 sec=170 cylinders
。因为一个圆柱体有 15 条轨道。 我来自哪里,这是一个相当大的数据集。
虽然 JCL 有一个用于空间分配的 RLSE 参数,该参数表示释放(解除分配)未使用的主空间,但我在 SITE 命令中没有看到执行相同功能的任何内容。 通常,有人为分配的空间付费,即使它是空的。 一些商店安排了释放未使用但已分配空间的作业。 所有这些都是说,只是在你的分配上扔一堆空间并称其为成功,因为FTP工作可能会让你不受任何支付账单的人的欢迎。
所有这些磁盘空间分配工作都可以追溯到磁盘按照今天的标准非常昂贵的时候。