Plone将Blob数据迁移到"浓密的"布局IOError Errno 21

时间:2014-09-08 21:03:21

标签: python plone zodb

我正在尝试将我们的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可能腐败吗?这是一个开发环境,我一直在与blobstorage有一些其他问题,这就是为什么我试图迁移到浓密,希望它将解决一些问题。

想法或解决方案?

1 个答案:

答案 0 :(得分:5)

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

草坪布局采用扁平结构;目录以OID命名,在每个目录中只是 blob文件的修订版。 浓密布局在OID 中每个字节使用一个目录,从而导致目录树。

当从草坪移动到浓密时,脚本会将目录假设为有效的OID,并且每个都假定所有它都是 。 ll在目录中找到修订文件。

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

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

如果混合使用0xhh和更长的0xhhhhhhhhh十六进制目录(后者只包含文件,没有目录),那么您设法将草坪浓密布局到一个blob存储中。如果布局标记为 lawn ,则浓密部分很可能已过期。您可以尝试将只有2个十六进制数字的所有目录移动到新的blobstorage目录(并添加一个内容为.layout的新bushy文件),但我不是确信任何有用的东西都包含在其中。