Permissions 无法将文件上载到Raspberry Pi 3上的OpenStack Swift 2.14.0,因为;[ERRNO13]拒绝许可”;

Permissions 无法将文件上载到Raspberry Pi 3上的OpenStack Swift 2.14.0,因为;[ERRNO13]拒绝许可”;,permissions,cloud,openstack,raspbian,openstack-swift,Permissions,Cloud,Openstack,Raspbian,Openstack Swift,在我的OpenStack Swift 2.14.0版安装中创建和擦除存储桶(容器)效果良好。这是一个只有快速安装。没有部署像Keystone这样的OpenStack服务 $ swift stat Account: AUTH_test Containers: 2 Objects: 0 Bytes: 0 Cont

在我的OpenStack Swift 2.14.0版安装中创建和擦除存储桶(容器)效果良好。这是一个只有快速安装。没有部署像Keystone这样的OpenStack服务

$ swift stat
                        Account: AUTH_test
                     Containers: 2
                        Objects: 0
                          Bytes: 0
Containers in policy "policy-0": 2
   Objects in policy "policy-0": 0
     Bytes in policy "policy-0": 0
                     Connection: keep-alive
...

$ swift post s3perf
$ swift list -A http://10.0.0.253:8080/auth/v1.0 -U test:tester -K testing
bucket
s3perf
这些是关于在文件
storage1.error
中创建bucket的(肯定)消息

$ tail -f /var/log/swift/storage1.error
...
May  9 13:58:50 raspberrypi container-server: STDERR: (1114) accepted
('127.0.0.1', 38118)
May  9 13:58:50 raspberrypi container-server: STDERR: 127.0.0.1 - - 
[09/May/2017 11:58:50] "POST /d1/122/AUTH_test/s3perf HTTP/1.1" 204 142 
0.021630 (txn: tx982eb25d83624b37bd290-005911aefa)
但任何上载文件的尝试都只会导致错误消息
[Errno 13]权限被拒绝

$ swift upload s3perf s3perf-testfile1.txt 
Object PUT failed: http://10.0.0.253:8080/v1/AUTH_test/s3perf/s3perf-testfile1.txt 
503 Service Unavailable  [first 60 chars of response] <html><h1>Service 
Unavailable</h1><p>The server is currently

$ tail -f /var/log/swift/storage1.error
...
May 18 20:55:44 raspberrypi object-server: STDERR: (927) accepted 
('127.0.0.1', 45684)
May 18 20:55:44 raspberrypi object-server: ERROR __call__ error with PUT 
/d1/40/AUTH_test/s3perf/testfile : #012Traceback (most recent call 
last):#012  File "/home/pi/swift/swift/obj/server.py", line 1105, in 
__call__#012    res = getattr(self, req.method)(req)#012  File 
"/home/pi/swift/swift/common/utils.py", line 1626, in _timing_stats#012    
resp = func(ctrl, *args, **kwargs)#012  File 
"/home/pi/swift/swift/obj/server.py", line 814, in PUT#012    
writer.put(metadata)#012  File "/home/pi/swift/swift/obj/diskfile.py", 
line 2561, in put#012    super(DiskFileWriter, self)._put(metadata, 
True)#012  File "/home/pi/swift/swift/obj/diskfile.py", line 1566, in 
_put#012    tpool_reraise(self._finalize_put, metadata, target_path, 
cleanup)#012  File "/home/pi/swift/swift/common/utils.py", line 3536, in 
tpool_reraise#012    raise resp#012IOError: [Errno 13] Permission denied 
(txn: txfbf08bffde6d4657a72a5-00591dee30)
May 18 20:55:44 raspberrypi object-server: STDERR: 127.0.0.1 - - 
[18/May/2017 18:55:44] "PUT /d1/40/AUTH_test/s3perf/testfile HTTP/1.1" 
500 875 0.015646 (txn: txfbf08bffde6d4657a72a5-00591dee30)
我已以用户
pi
的身份启动Swift,并将这些文件夹分配给该用户:

$ sudo chown pi:pi /etc/swift
$ sudo chown -R pi:pi /mnt/sdb1/*
$ sudo chown -R pi:pi /var/cache/swift
$ sudo chown -R pi:pi /var/run/swift
sdb1
是一种带有XFS文件系统的环回设备

$ mount | grep sdb1
/srv/swift-disk on /mnt/sdb1 type xfs (rw,noatime,nodiratime,attr2,nobarrier,inode64,logbufs=8,noquota)

$ ls -ld /mnt/sdb1/1/
drwxr-xr-x 3 pi pi 17 May 12 13:14 /mnt/sdb1/1/
我部署了斯威夫特

我想知道为什么创建bucket(conrainers)是可行的,但文件的上载失败,因为
权限被拒绝

$ swift upload s3perf s3perf-testfile1.txt 
Object PUT failed: http://10.0.0.253:8080/v1/AUTH_test/s3perf/s3perf-testfile1.txt 
503 Service Unavailable  [first 60 chars of response] <html><h1>Service 
Unavailable</h1><p>The server is currently

$ tail -f /var/log/swift/storage1.error
...
May 18 20:55:44 raspberrypi object-server: STDERR: (927) accepted 
('127.0.0.1', 45684)
May 18 20:55:44 raspberrypi object-server: ERROR __call__ error with PUT 
/d1/40/AUTH_test/s3perf/testfile : #012Traceback (most recent call 
last):#012  File "/home/pi/swift/swift/obj/server.py", line 1105, in 
__call__#012    res = getattr(self, req.method)(req)#012  File 
"/home/pi/swift/swift/common/utils.py", line 1626, in _timing_stats#012    
resp = func(ctrl, *args, **kwargs)#012  File 
"/home/pi/swift/swift/obj/server.py", line 814, in PUT#012    
writer.put(metadata)#012  File "/home/pi/swift/swift/obj/diskfile.py", 
line 2561, in put#012    super(DiskFileWriter, self)._put(metadata, 
True)#012  File "/home/pi/swift/swift/obj/diskfile.py", line 1566, in 
_put#012    tpool_reraise(self._finalize_put, metadata, target_path, 
cleanup)#012  File "/home/pi/swift/swift/common/utils.py", line 3536, in 
tpool_reraise#012    raise resp#012IOError: [Errno 13] Permission denied 
(txn: txfbf08bffde6d4657a72a5-00591dee30)
May 18 20:55:44 raspberrypi object-server: STDERR: 127.0.0.1 - - 
[18/May/2017 18:55:44] "PUT /d1/40/AUTH_test/s3perf/testfile HTTP/1.1" 
500 875 0.015646 (txn: txfbf08bffde6d4657a72a5-00591dee30)
更新1:

$ sudo swift-ring-builder /etc/swift/account.builder
/etc/swift/account.builder, build version 2
256 partitions, 1.000000 replicas, 1 regions, 1 zones, 1 devices, 0.00 balance, 0.00 dispersion
The minimum number of hours before a partition can be reassigned is 0 (0:00:00 remaining)
The overload factor is 0.00% (0.000000)
Ring file /etc/swift/account.ring.gz is up-to-date
Devices:   id region zone ip address:port replication ip:port  name weight partitions balance flags meta
            0      1    1  127.0.0.1:6012      127.0.0.1:6012    d1   1.00        256    0.00   

$ sudo swift-ring-builder /etc/swift/container.builder
/etc/swift/container.builder, build version 2
256 partitions, 1.000000 replicas, 1 regions, 1 zones, 1 devices, 0.00 balance, 0.00 dispersion
The minimum number of hours before a partition can be reassigned is 0 (0:00:00 remaining)
The overload factor is 0.00% (0.000000)
Ring file /etc/swift/container.ring.gz is up-to-date
Devices:   id region zone ip address:port replication ip:port  name weight partitions balance flags meta
            0      1    1  127.0.0.1:6011      127.0.0.1:6011    d1   1.00        256    0.00    

$ sudo swift-ring-builder /etc/swift/object.builder
/etc/swift/object.builder, build version 2
256 partitions, 1.000000 replicas, 1 regions, 1 zones, 1 devices, 0.00 balance, 0.00 dispersion
The minimum number of hours before a partition can be reassigned is 0 (0:00:00 remaining)
The overload factor is 0.00% (0.000000)
Ring file /etc/swift/object.ring.gz is up-to-date
Devices:   id region zone ip address:port replication ip:port  name weight partitions balance flags meta
            0      1    1  127.0.0.1:6010      127.0.0.1:6010    d1   1.00        256    0.00     
更新2

所需的端口已打开

$ nmap localhost -p 6010,6011,6012,8080,22
...
PORT     STATE SERVICE
22/tcp   open  ssh
6010/tcp open  x11
6011/tcp open  unknown
6012/tcp open  unknown
8080/tcp open  http-proxy
更新3

我可以在Swift应该存储对象的文件夹中以用户身份编写
pi

$ whoami
pi
$ touch /srv/1/node/d1/objects/test
$ ls -l /srv/1/node/d1/objects/test
-rw-r--r-- 1 pi pi 0 May 13 22:59 /srv/1/node/d1/objects/test
更新4

所有swift流程都属于用户
pi

$ ps aux | grep swift
pi         944  3.2  2.0  24644 20100 ?        Ss   May12  65:14 /usr/bin/python /usr/local/bin/swift-proxy-server /etc/swift/proxy-server.conf
pi         945  3.1  2.0  25372 20228 ?        Ss   May12  64:30 /usr/bin/python /usr/local/bin/swift-container-server /etc/swift/container-server.conf
pi         946  3.1  1.9  24512 19416 ?        Ss   May12  64:03 /usr/bin/python /usr/local/bin/swift-account-server /etc/swift/account-server.conf
pi         947  3.1  1.9  23688 19320 ?        Ss   May12  64:04 /usr/bin/python /usr/local/bin/swift-object-server /etc/swift/object-server.conf
pi        1000  0.0  1.7 195656 17844 ?        Sl   May12   0:01 /usr/bin/python /usr/local/bin/swift-object-server /etc/swift/object-server.conf
pi        1001  0.0  1.8 195656 18056 ?        Sl   May12   0:01 /usr/bin/python /usr/local/bin/swift-object-server /etc/swift/object-server.conf
pi        1002  0.0  1.6  23880 16772 ?        S    May12   0:01 /usr/bin/python /usr/local/bin/swift-object-server /etc/swift/object-server.conf
pi        1003  0.0  1.7 195656 17848 ?        Sl   May12   0:01 /usr/bin/python /usr/local/bin/swift-object-server /etc/swift/object-server.conf
pi        1004  0.0  1.7  24924 17504 ?        S    May12   0:01 /usr/bin/python /usr/local/bin/swift-account-server /etc/swift/account-server.conf
pi        1005  0.0  1.6  24924 16912 ?        S    May12   0:01 /usr/bin/python /usr/local/bin/swift-account-server /etc/swift/account-server.conf
pi        1006  0.0  1.8  24924 18368 ?        S    May12   0:01 /usr/bin/python /usr/local/bin/swift-account-server /etc/swift/account-server.conf
pi        1007  0.0  1.8  24924 18208 ?        S    May12   0:01 /usr/bin/python /usr/local/bin/swift-account-server /etc/swift/account-server.conf
pi        1008  0.0  1.8  25864 18824 ?        S    May12   0:01 /usr/bin/python /usr/local/bin/swift-container-server /etc/swift/container-server.conf
pi        1009  0.0  1.8  25864 18652 ?        S    May12   0:01 /usr/bin/python /usr/local/bin/swift-container-server /etc/swift/container-server.conf
pi        1010  0.0  1.7  25864 17340 ?        S    May12   0:01 /usr/bin/python /usr/local/bin/swift-container-server /etc/swift/container-server.conf
pi        1011  0.0  1.8  25864 18772 ?        S    May12   0:01 /usr/bin/python /usr/local/bin/swift-container-server /etc/swift/container-server.conf
pi        1012  0.0  1.8  24644 18276 ?        S    May12   0:03 /usr/bin/python /usr/local/bin/swift-proxy-server /etc/swift/proxy-server.conf
pi        1013  0.0  1.8  24900 18588 ?        S    May12   0:03 /usr/bin/python /usr/local/bin/swift-proxy-server /etc/swift/proxy-server.conf
pi        1014  0.0  1.8  24900 18588 ?        S    May12   0:03 /usr/bin/python /usr/local/bin/swift-proxy-server /etc/swift/proxy-server.conf
pi        1015  0.0  1.8  24900 18568 ?        S    May12   0:03 /usr/bin/python /usr/local/bin/swift-proxy-server /etc/swift/proxy-server.conf
更新5

当我创建一个bucket时,Swift服务会创建一个如下文件夹:

/mnt/sdb1/1/node/d1/containers/122/9d5/7a23d9409f11da3062432c6faa75f9d5/
该文件夹包含一个类似于
7a23d9409f11da3062432c6faa75f9d5.db的
db
文件。我认为这是正确的行为

但当我试图上传一个存储桶中的文件时,Swift只会创建一个像这样的空文件夹

/mnt/sdb1/1/node/d1/objects/139/eca/8b17958f984943fc97b6b937061d2eca
我可以通过
touch
echo
作为用户
pi
在这些空文件夹中创建文件,但出于未知原因,Swift不在这些文件夹中存储文件

更新6

为了进一步调查这个问题,我按照说明安装了Swift,一次安装在带有Ubuntu 14.04 LTS的VMware ESXi虚拟机中,另一次安装在Raspberry Pi 3上的Raspbian中。结果是,在Ubuntu14.04虚拟机中,Swift工作得很好,但在运行Rasberry Pi的ontop时,上传文件不起作用

Object PUT failed: http://10.0.0.253:8080/v1/AUTH_test/s3perf-testbucket/testfiles/s3perf-testfile1.txt 
503 Service Unavailable  [first 60 chars of response] 
<html><h1>Service Unavailable</h1><p>The server is currently
更新7


这个问题仍然没有解决,但我现在有一个关于树莓皮的工作快速服务。我安装了(相当过时的)Swift修订版2.2.0,它随Raspbian一起提供,运行良好。我所做的步骤已经解释过了。

根据您提供的信息,错误发生在编写元数据的过程中

写入元数据的操作分为两类:操作inode和操作扩展属性。因此,有两种可能的错误来源

首先,这是一个与inode相关的错误。安装设备时设置
inode64
参数可能会出现此错误。根据报告:

如果正在使用的应用程序不处理大于32位的inode编号,则应指定inode32选项


其次,这是一个扩展属性相关错误。您可以使用python的
xattr
包编写扩展属性,并检查是否发生异常。

您可以粘贴以下命令的输出:$sudo-swift-ring-builder/etc/swift/account.builder$sudo-swift-ring-builder/etc/swift/container.builder$sudo-swift-ring-builder/etc/swift/object.builder
May 24 13:15:15 raspberrypi object-server: ERROR __call__ error with PUT 
/sdb1/484/AUTH_test/s3perf-testbucket/testfiles/s3perf-testfile1.txt :
#012Traceback (most recent call last):#012  File 
"/home/pi/swift/swift/obj/server.py", line 1105, in __call__#012    res = 
getattr(self, req.method)(req)#012  File 
"/home/pi/swift/swift/common/utils.py", line 1626, in _timing_stats#012    
resp = func(ctrl, *args, **kwargs)#012  File 
"/home/pi/swift/swift/obj/server.py", line 814, in PUT#012    
writer.put(metadata)#012  File "/home/pi/swift/swift/obj/diskfile.py", 
line 2561, in put#012    super(DiskFileWriter, self)._put(metadata, 
True)#012  File "/home/pi/swift/swift/obj/diskfile.py", line 1566, in
 _put#012    tpool_reraise(self._finalize_put, metadata, target_path, 
cleanup)#012  File "/home/pi/swift/swift/common/utils.py", line 3536, in 
tpool_reraise#012    raise resp#012IOError: [Errno 13] Permission denied  
(txn: txdfe3c7f704be4af8817b3-0059256b43)