事象について

SwiftStorage Node 上で全てのサービスを立ち上げたらログに以下のエラーメッセージが繰り返し出力されていました。

  • ERROR creating /srv/node/sdb1/objects: ・・・ OSError: [Errno 13] Permission denied: '/srv/node/sdb1/objects'

エラーメッセージを見ると、権限がおかしいと言っていますね。

Storage Node : /var/log/syslogRaw Code(S)Raw Code(T)
# tail -f /var/log/syslog
Sep  8 16:41:31 swift-node01 account-replicator: Beginning replication run
Sep  8 16:41:31 swift-node01 account-replicator: Replication run OVER
Sep  8 16:41:31 swift-node01 account-replicator: Attempted to replicate 0 dbs in 0.00193 seconds (0.00000/s)
Sep  8 16:41:31 swift-node01 account-replicator: Removed 0 dbs
Sep  8 16:41:31 swift-node01 account-replicator: 0 successes, 0 failures
Sep  8 16:41:31 swift-node01 account-replicator: no_change:0 ts_repl:0 diff:0 rsync:0 diff_capped:0 hashmatch:0 empty:0
Sep  8 16:41:32 swift-node01 object-replicator: Starting object replication pass.
Sep  8 16:41:32 swift-node01 object-replicator: ERROR creating /srv/node/sdb1/objects: #012Traceback (most recent call last):#012  File "/usr/lib/python2.7/dist-packages/swift/obj/replicator.py", line 428, in process_repl#012    mkdirs(obj_path)#012  File "/usr/lib/python2.7/dist-packages/swift/common/utils.py", line 770, in mkdirs#012    os.makedirs(path)#012  File "/usr/lib/python2.7/os.py", line 157, in makedirs#012    mkdir(name, mode)#012OSError: [Errno 13] Permission denied: '/srv/node/sdb1/objects'
Sep  8 16:41:32 swift-node01 object-replicator: ERROR creating /srv/node/sdc1/objects: #012Traceback (most recent call last):#012  File "/usr/lib/python2.7/dist-packages/swift/obj/replicator.py", line 428, in process_repl#012    mkdirs(obj_path)#012  File "/usr/lib/python2.7/dist-packages/swift/common/utils.py", line 770, in mkdirs#012    os.makedirs(path)#012  File "/usr/lib/python2.7/os.py", line 157, in makedirs#012    mkdir(name, mode)#012OSError: [Errno 13] Permission denied: '/srv/node/sdc1/objects'
Sep  8 16:41:32 swift-node01 object-replicator: Nothing replicated for 0.00285196304321 seconds.
Sep  8 16:41:32 swift-node01 object-replicator: Object replication complete. (0.00 minutes)
Sep  8 16:41:33 swift-node01 object-auditor: Begin object audit "forever" mode (ZBF)
Sep  8 16:41:33 swift-node01 object-auditor: Object audit (ZBF) "forever" mode completed: 0.00s. Total quarantined: 0, Total errors: 0, Total files/sec: 0.00, Total bytes/sec: 0.00, Auditing time: 0.00, Rate: 0.00
Sep  8 16:41:34 swift-node01 container-replicator: Beginning replication run
Sep  8 16:41:34 swift-node01 container-replicator: Replication run OVER
Sep  8 16:41:34 swift-node01 container-replicator: Attempted to replicate 0 dbs in 0.00267 seconds (0.00000/s)
Sep  8 16:41:34 swift-node01 container-replicator: Removed 0 dbs
Sep  8 16:41:34 swift-node01 container-replicator: 0 successes, 0 failures
Sep  8 16:41:34 swift-node01 container-replicator: no_change:0 ts_repl:0 diff:0 rsync:0 diff_capped:0 hashmatch:0 empty:0

対策方法

良くある権限問題ということで。

該当ディレクトリ /srv/node のディレクトリ権限を確認してみると所有権が全て root ユーザになっていることがわかります。

Storage Node : /srv/node 権限確認Raw Code(S)Raw Code(T)
# ls -al /srv/node/
total 8
drwxr-xr-x 4 root root 4096  9月  8 14:28 .
drwxr-xr-x 3 root root 4096  9月  8 14:28 ..
drwxr-xr-x 2 root root    6  9月  8 14:27 sdb1
drwxr-xr-x 2 root root    6  9月  8 14:27 sdc1

Swift のデータ領域として使われるマウントポイント用のディレクトリ所有権は、swift:swift である必要があります

よって、この例では、/srv/node ディレクトリとその配下に存在する全てのディレクトリの所有権を全て swift:swift に設定する必要があります。

Storage Node : /srv/node 権限設定Raw Code(S)Raw Code(T)
# chown -R swift:swift /srv/node

# ls -al /srv/node/
total 8
drwxr-xr-x 4 swift swift 4096  9月  8 14:28 .
drwxr-xr-x 3 root  root  4096  9月  8 14:28 ..
drwxr-xr-x 2 swift swift    6  9月  8 14:27 sdb1
drwxr-xr-x 2 swift swift    6  9月  8 14:27 sdc1

サービス再起動は、不要です。

ディレクトリの所有権・権限さえあっていれば、エラーメッセージは、出なくなります。

Storage Node : /var/log/syslogRaw Code(S)Raw Code(T)
# tail -f /var/log/syslog
Sep  8 16:49:01 swift-node01 account-replicator: Beginning replication run
Sep  8 16:49:01 swift-node01 account-replicator: Replication run OVER
Sep  8 16:49:01 swift-node01 account-replicator: Attempted to replicate 0 dbs in 0.00181 seconds (0.00000/s)
Sep  8 16:49:01 swift-node01 account-replicator: Removed 0 dbs
Sep  8 16:49:01 swift-node01 account-replicator: 0 successes, 0 failures
Sep  8 16:49:01 swift-node01 account-replicator: no_change:0 ts_repl:0 diff:0 rsync:0 diff_capped:0 hashmatch:0 empty:0
Sep  8 16:49:02 swift-node01 object-replicator: Starting object replication pass.
Sep  8 16:49:02 swift-node01 object-replicator: Nothing replicated for 0.00160789489746 seconds.
Sep  8 16:49:02 swift-node01 object-replicator: Object replication complete. (0.00 minutes)
Sep  8 16:49:04 swift-node01 object-auditor: Begin object audit "forever" mode (ZBF)
Sep  8 16:49:04 swift-node01 object-auditor: Object audit (ZBF) "forever" mode completed: 0.00s. Total quarantined: 0, Total errors: 0, Total files/sec: 0.00, Total bytes/sec: 0.00, Auditing time: 0.00, Rate: 0.00
Sep  8 16:49:04 swift-node01 object-auditor: Begin object audit "forever" mode (ALL)
Sep  8 16:49:04 swift-node01 object-auditor: Object audit (ALL) "forever" mode completed: 0.00s. Total quarantined: 0, Total errors: 0, Total files/sec: 0.00, Total bytes/sec: 0.00, Auditing time: 0.00, Rate: 0.00
Sep  8 16:49:04 swift-node01 container-replicator: Beginning replication run
Sep  8 16:49:04 swift-node01 container-replicator: Replication run OVER
Sep  8 16:49:04 swift-node01 container-replicator: Attempted to replicate 0 dbs in 0.00243 seconds (0.00000/s)
Sep  8 16:49:04 swift-node01 container-replicator: Removed 0 dbs
Sep  8 16:49:04 swift-node01 container-replicator: 0 successes, 0 failures
Sep  8 16:49:04 swift-node01 container-replicator: no_change:0 ts_repl:0 diff:0 rsync:0 diff_capped:0 hashmatch:0 empty:0

終わりに

一通り構築が終わって、Storage Node 上で、swift-init main start でサービスを立ち上げ、swift-init status でステータスを確認しても特に問題なかったので、よしとしていましたが、念のためログを確認したところ、エラーを吐いていました。

なので、構築する段階では、サービスは正常であっても、本当に問題ないか必ずログを確認し、警告・エラー等の怪しいメッセージがないか確認することが大事だなと改めて思いました。

以上、OpenStack : ERROR creating /srv/node/sdb1/objects エラーの対処方法でした。