Docker xfs filesystem without d_type support

[摘要] CentOS7 下安裝配置 Docker,在配置 swarm 集羣時有可能會遇到以下的WARNING,會說 xfs 文件系統不支持d_type,建議從新格式化文件系統加上 ftype=1 來打開 d_type 的支持,下面來了解下 xfs 下的 d_type。node

問題現象
在運行docker swarm init –advertise-addr xxx.xxx.xxx.xxx 命令時,若是你的文件系統使用了xfs,那麼Docker會檢測ftype的值,若是ftype=0,那麼會有警告出現。
具體警告以下:docker

WARNING: overlay: the backing xfs filesystem is formatted without d_type support, which leads to incorrect behavior.
Reformat the filesystem with ftype=1 to enable d_type support.
Running without d_type support will not be supported in future releases.
.
那麼爲何 d_type 對於Docker來講這麼重要呢?
要知道Overlay 和 Overlay2是Docker支持的兩種存儲驅動,相似AUFS,其主要有以下幾個特性:json

   1) 設計更加簡單;
   2) 從3.18內核開始,就進入了Linux內核主線;
   3) 速度更快。bootstrap

   Docker的overlay存儲驅動利用了不少OverlayFS特性來構建和管理鏡像與容器的磁盤結構。自從Docker1.12起,Docker也支持overlay2存儲驅動,相比於overlay來講,overlay2在inode優化上更加高效。但overlay2驅動只兼容Linux kernel4.0以上的版本。
  注:自從OverlayFS加入kernel主線後,它在kernel模塊中的名稱就被從overlayfs改成overlay了。ide

OverlayFS使用兩個目錄,把一個目錄置放於另外一個之上,而且對外提供單個統一的視角。這兩個目錄一般被稱做層,這個分層的技術被稱做union mount。術語上,下層的目錄叫作lowerdir,上層的叫作upperdir。對外展現的統一視圖稱做merged。
下圖展現了Docker鏡像和Docker容器是如何分層的。鏡像層就是lowerdir,容器層是upperdir。暴露在外的統一視圖就是所謂的merged。優化

Docker xfs filesystem without d_type support

當Docker 運行在overlay/overlay2存儲驅動上時,須要d_type特性的支持才能正常工做,Docker1.13之後加入了對此的檢查,能夠運行docker info命令來查看文件系統是否支持d_type這個特性。

sudops.com>$ docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 17.07.0-ce-rc2
Storage Driver: overlay
Backing Filesystem: xfs
Supports d_type: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: activeui

若是overlayfs存儲驅動不支持d_type的話,容器在操做文件系統時可能會出現一些奇怪的錯誤:好比在bootstrap的時候出現Chown error,或者rebuild時發生錯誤等等。操作系統

如何解決?
壞消息是隻能經過重作文件系統來解決,是不能在已經存在的操做系統上進行修改的哦!!!
下面是基本上可行的步驟:
(1)備份你的數據
(2)從新建立你的文件系統,固然能夠是使用XFS,也可使用Ext4
(3)恢復備份的數據回來
針對第二點,咱們能夠有以下操做(作下面命令以前最好了解下命令可能帶來的影響:):
若是是使用ext4文件系統,那麼命令是:設計

mkfs.ext4 /path/to/your/devicecode

若是是使用xfs文件系統,那麼命令是:

mkfs.xfs -n ftype=1 /path/to/your/device

如今您就能夠檢查下RHEL/CentOS7是否存在d_type問題:

sudops.com>$ sudo xfs_info /meta-data=/dev/sda3 isize=256 agcount=4, agsize=32230848 blks= sectsz=512 attr=2, projid32bit=1= crc=0 finobt=0 spinodes=0data = bsize=4096 blocks=128923392, imaxpct=25= sunit=0 swidth=0 blksnaming =version 2 bsize=4096 ascii-ci=0 ftype=0log =internal bsize=4096 blocks=62950, version=2= sectsz=512 sunit=0 blks, lazy-count=1realtime =none extsz=4096 blocks=0, rtextents=0像我這臺機器就是ftype=0,若是計劃加入到Docker節點的話,須要進行調整哦!

相關文章
相關標籤/搜索