Plone 将 Blob 数据迁移到"bushy"布局 IOError errno 21



我正试图将我们的blobstorage(使用Plone 4.3.2和ZODB3 3.10.5)从"草坪"布局迁移到"浓密"布局。在运行脚本时,我得到以下回溯:

(11719) Blob directory `var/blobstorage-lawn/` has layout marker set. Selected `lawn` layout.
(11719) The `lawn` blob directory layout is deprecated due to scalability issues on some file systems, please consider migrating to the `bushy` layout.
Migrating blob data from `var/blobstorage-lawn/` (lawn) to `var/blobstorage` (bushy)
Traceback (most recent call last):
  File "bin/migrateblobs", line 19, in <module>
    sys.exit(ZODB.scripts.migrateblobs.main())
  File "/var/db/zope/plone43_dev/buildout-cache/eggs/ZODB3-3.10.5-py2.7-linux- x86_64.egg/ZODB/scripts/migrateblobs.py", line 77, in main
    migrate(source, dest, options.layout)
  File "/var/db/zope/plone43_dev/buildout-cache/eggs/ZODB3-3.10.5-py2.7-linux-x86_64.egg/ZODB/scripts/migrateblobs.py", line 52, in migrate
    link_or_copy(source_file, dest_file)
  File "/var/db/zope/plone43_dev/buildout-cache/eggs/ZODB3-3.10.5-py2.7-linux-x86_64.egg/ZODB/scripts/migrateblobs.py", line 30, in link_or_copy
    shutil.copy(f1, f2)
  File "/var/db/zope/plone43_dev/Python-2.7/lib/python2.7/shutil.py", line 119, in copy
    copyfile(src, dst)
  File "/var/db/zope/plone43_dev/Python-2.7/lib/python2.7/shutil.py", line 82, in copyfile
    with open(src, 'rb') as fsrc:
IOError: [Errno 21] Is a directory: '/var/db/zope/plone43_dev/zeocluster/var/blobstorage-lawn/0x00/0x00'

我不明白它为什么要复制目录。这是产品中的错误吗?或者我的胸脯肉可能是腐败的?这是一个开发环境,我在blobstorage方面遇到了一些其他问题,这就是为什么我试图迁移到bushy,希望它能解决一些问题。

想法还是解决方案?

您似乎有一个浓密的布局与草坪的布局混合在一起。

草坪布局使用平面结构;目录以OID命名,每个目录中只有blob文件的修订版。bushy布局在OID中每字节使用一个目录,从而生成目录树。

当从lawn移动到bushy时,脚本会获取目录,假设它们是有效的OID,并且在每个目录中都假设它在目录中找到的都是修订文件。

但是,您已经有了浓密的布局结构。脚本正试图将目录0x00从顶级目录0x00中移出。这正是你在浓密布局中找到的目录,而不是草坪的布局。你的结构确实被破坏了。

可能所有的错误都是标记文件;如果顶层只有0xhh 2位十六进制编号的目录,那么只有一个伪装成草坪的浓密布局。然后,您可以尝试将var/blobstorage-lawn目录中的.layout文件从lawn更改为bushy,并查看ZODB是否仍然有效。如果没有,它可能已经无法修复。

如果您混合了0xhh和较长的0xhhhhhhhhh十六进制目录(后者只包含文件,没有目录),那么您就成功地将草坪浓密布局放入一个blob存储中。如果布局标记为草坪,则浓密部分很可能已过时。您可以尝试将所有只有2个十六进制数字的目录移到一个新的blobstorage目录中(并添加一个内容为bushy的新.layout文件),但我不太相信其中包含任何有用的内容。

最新更新