我正在尝试将我们的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有一些其他问题,这就是为什么我试图迁移到浓密,希望它将解决一些问题。
想法或解决方案?
答案 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
文件),但我不是确信任何有用的东西都包含在其中。