±¾ÎÄÊÇÊýÈËÔÆ¼Ü¹¹Ê¦·¶±òµÄÏßÉÏ·ÖÏí£¬Í¨¹ýÒ»´Î¿Í»§ÊµÊ©°¸ÀýÉîÈëµØ½âÎöDockerµÄ´æ´¢·½Ê½£¬²¢¸ø³öһЩ¼¼ÊõÑ¡Ð͵Ľ¨Òé¡£¼Î±öÊÇÃÈÃÈßÕÃÃ×Ó£¬·ÖÏíÊÇÂúÂúßոɻõ£º£©
µÚÒ»²¿·Ö ÎÊÌâÕï¶Ï
ÊÂÇé´ÓÒ»´ÎʵʩÏîĿ˵Æð£¬ÎÒÃÇÐèÒª°ïÖú¿Í»§½«ËûÃǵÄÓ¦ÓÃÈÝÆ÷»¯²¢ÔÚÊýÈËÔÆÆ½Ì¨ÉÏ·¢²¼´ËÓ¦Ó᣿ͻ§µÄÓ¦ÓÃÊÇ´«Í³WASÓ¦Óá£Ó¦ÓÃÊÇͨ¹ýWAS
console½çÃæ½øÐÐÊÖ¹¤²¿Êð£¬ÔÝʱÎÞ·¨Í¨¹ýDockerfile½øÐÐ×Ô¶¯»¯Ó¦Óò¿Êð£¬×îºóµÄ¾µÏñÊÇͨ¹ýDocker
commitÍê³É¡£¾µÏñÆô¶¯Ö´ÐÐÃüÁîÊÇstartwas.sh,²¢Í¨¹ýtail½«Ó¦ÓÃÈÕÖ¾Êä³öµ½±ê×¼Êä³ö¡£
Æô¶¯ÈÝÆ÷£¬WAS ServerÆô¶¯Ê§°Ü£¬´íÎóÈÕÖ¾ÈçÏ£º 
WAS Server±ê×¼ÈÕÖ¾ÎļþstartServer.logºÍnativestderr.log¶¼Ã»Óиü¼ÓÏêϸµÄ´íÎóÐÅÏ¢¡£×îºó¹¦·ò²»¸ºÓÐÐÄÈË£¬
ÔÚconfigurationĿ¼ÏÂÕÒµ½¿ÉÒÔ¶¨Î»µÄ´íÎóÐÅÏ¢ ==!£º

Îļþ·ÃÎÊIOÒì³££¬²é¿´ÏàӦĿ¼ÎļþµÄÊôÐÔ£º

µ½ÏÖÔÚΪֹ£¬¿ÉÒÔ³õ²½ÅжÏÊÇDocker´æ´¢·½Ê½(storage drive)ÔÚ¾µÏñÈÝÆ÷·Ö²ã¹ÜÀíÉϵÄÎÊÌâ¡£
µ±Ç°ËÞÖ÷»úÊÇCentos7.2£¬ÄÚºË3.10.0¡£²¢ÇҲ鿴µ±Ç°ËÞÖ÷»úÐÅÏ¢ÊÇDocker1.12.0£¬´æ´¢·½Ê½ÊÇOverlay£¬ËÞÖ÷»úµÄÎļþϵͳÊÇxfs:

ΪÁËÑéÖ¤ÎÒÃǵÄÍÆ¶Ï£¬ÎÒÃÇ×öÁËÈçϼ¸·½ÃæµÄ³¢ÊÔ£º
³¢ÊÔ1: ʹÓÃÊý¾Ý¾í¹ÒÔØµÄ·½Ê½£¬¹ÒÔØÕû¸öwashome Ŀ¼¡££¨Êý¾Ý¾íÊÇDockerËÞÖ÷»úµÄĿ¼»òÎļþ£¬Í¨¹ýmountµÄ·½Ê½¼ÓÔØµ½ÈÝÆ÷À²»ÊÜ´æ´¢Çý¶¯µÄ¿ØÖÆ¡££©ÖØÐÂÖÆ×÷¾µÏñÆô¶¯ÈÝÆ÷£¬WAS
ServerÄÜÕý³£Æô¶¯¡£
³¢ÊÔ2: ¸Ä±äDocker engineµÄ´æ´¢·½Ê½£¬¸Ä³ÉDevice mapper£¬ÖØÐÂÀÈ¡¾µÏñ£¬²¢Æô¶¯ÈÝÆ÷£¬WAS
ServerÄÜÕý³£Æô¶¯¡£
ÄÇôÕâ¸öÎÊÌâÊÇÆÕ±éÎÊÌâÂð£¿
³¢ÊÔ3: ÔÚÆäËûµÄËÞÖ÷»úÉÏ£¬Æô¶¯Ô¾µÏñ£¬Õâ¸öÎÊÌâÊÇÎÞ·¨¸´Ïֵġ£
¾¹ý¶à´Î²âÊÔ·¢ÏÖÔÚÏàͬÄںˡ¢ÏµÍ³°æ±¾¡¢docker°æ±¾ÓÐЩ»úÆ÷ÓÐÎÊÌâÓÐЩ»úÆ÷ûÓÐÎÊÌ⣬×îÖÕ·¢ÏÖÊÇ
Centos ÌṩµÄÐÂÎļþϵͳ XFS ºÍ Overlay ¼æÈÝÎÊÌâµ¼Ö¡£Í¬Ê±£¬ÎÒÃÇ´ÓDockerÉçÇøÕÒµ½Ïà¹ØÎÊÌâµÄissue±¨¸æ£ºhttps://github.com/docker/docker/issues/9572
Õâ¸öÎÊÌâµÄÐÞ¸´ÔÚÄÚºË 4.4.6ÒÔÉÏ¡£×ÛÉÏËùÊö£¬ÎÒÃǵõ½ÁËÒ»¸ö½áÂÛ£¬Õâ¸öÎÊÌâµÄ¸ù±¾ÔÒòÊÇoverlayFSÔÚxfsÉϳöÏÖÁ˼æÈÝÐÔµÄÎÊÌâ¡£
ÊÂÇéµÄÆðÒòµ½´ËΪֹ£¬ÏÂÃæÈÃÎÒÃÇÉîÈëµÄ¿´¿´DockerµÄ¼¸ÖÖ´æ´¢·½Ê½£¬²¢¸ø³öһЩ¼¼ÊõÑ¡Ð͵Ľ¨Òé¡£
µÚ¶þ²¿·Ö ¸ÅÊö
DockerÔÚÆô¶¯ÈÝÆ÷µÄʱºò£¬ÐèÒª´´½¨Îļþϵͳ£¬ÎªrootfsÌṩ¹ÒÔØµã¡£×îµ×²ãµÄÒýµ¼ÎļþϵͳbootfsÖ÷Òª°üº¬
bootloaderºÍkernel£¬bootloaderÖ÷ÒªÊÇÒýµ¼¼ÓÔØkernel£¬µ±kernel±»¼ÓÔØµ½ÄÚ´æÖкó
bootfs¾Í±»umountÁË¡£ rootfs°üº¬µÄ¾ÍÊǵäÐÍ Linux ϵͳÖеÄ/dev£¬/proc£¬/bin£¬/etcµÈ±ê׼Ŀ¼ºÍÎļþ¡£
Docker Ä£Ð͵ĺËÐIJ¿·ÖÊÇÓÐЧÀûÓ÷ֲ㾵Ïñ»úÖÆ£¬¾µÏñ¿ÉÒÔͨ¹ý·Ö²ãÀ´½øÐм̳У¬»ùÓÚ»ù´¡¾µÏñ£¨Ã»Óи¸¾µÏñ£©£¬¿ÉÒÔÖÆ×÷¸÷ÖÖ¾ßÌåµÄÓ¦ÓþµÏñ¡£Docker1.10ÒýÈëеĿÉѰַ´æ´¢Ä£ÐÍ£¬Ê¹Óð²È«ÄÚÈݹþÏ£´úÌæËæ»úµÄUUID¹ÜÀí¾µÏñ¡£Í¬Ê±£¬DockerÌṩÁËÇ¨ÒÆ¹¤¾ß£¬½«ÒѾ´æÔڵľµÏñÇ¨ÒÆµ½ÐÂÄ£ÐÍÉÏ¡£²»Í¬
Docker ÈÝÆ÷¾Í¿ÉÒÔ¹²ÏíһЩ»ù´¡µÄÎļþϵͳ²ã£¬Í¬Ê±ÔÙ¼ÓÉÏ×Ô¼º¶ÀÓеĿɶÁд²ã£¬´ó´óÌá¸ßÁË´æ´¢µÄЧÂÊ¡£ÆäÖÐÖ÷ÒªµÄ»úÖÆ¾ÍÊÇ·Ö²ãÄ£Ðͺͽ«²»Í¬Ä¿Â¼¹ÒÔØµ½Í¬Ò»¸öÐéÄâÎļþϵͳ¡£

Docker´æ´¢·½Ê½Ìṩ¹ÜÀí·Ö²ã¾µÏñºÍÈÝÆ÷µÄ¿É¶Áд²ãµÄ¾ßÌåʵÏÖ¡£×î³õDocker½öÄÜÔÚÖ§³ÖAUFSÎļþϵͳµÄubuntu·¢ÐаæÉÏÔËÐУ¬µ«ÊÇÓÉÓÚAUFSδÄܼÓÈëLinuxÄںˣ¬ÎªÁËѰÇó¼æÈÝÐÔ¡¢À©Õ¹ÐÔ£¬DockerÔÚÄÚ²¿Í¨¹ýgraphdriver»úÖÆÕâÖÖ¿ÉÀ©Õ¹µÄ·½Ê½À´ÊµÏÖ¶Ô²»Í¬ÎļþϵͳµÄÖ§³Ö¡£
DockerÓÐÈçϼ¸ÖÖ²»Í¬µÄdrivers£º
AUFS
Device mapper
Btrfs
OverlayFS
ZFS
µÚÈý²¿·Ö ·½°¸·ÖÎö
AUFS
AUFS£¨AnotherUnionFS£©ÊÇÒ»ÖÖUnion FS£¬ÊÇÎļþ¼¶µÄ´æ´¢Çý¶¯¡£Ëùν UnionFS
¾ÍÊǰѲ»Í¬ÎïÀíλÖõÄĿ¼ºÏ²¢ mount µ½Í¬Ò»¸öĿ¼ÖС£¼òµ¥À´Ëµ¾ÍÊÇÖ§³Ö½«²»Í¬Ä¿Â¼¹ÒÔØµ½Í¬Ò»¸öÐéÄâÎļþϵͳϵÄÎļþϵͳ¡£ÕâÖÖÎļþϵͳ¿ÉÒÔÒ»²ãÒ»²ãµØµþ¼ÓÐÞ¸ÄÎļþ¡£ÎÞÂÛµ×ÏÂÓжàÉٲ㶼ÊÇÖ»¶ÁµÄ£¬Ö»ÓÐ×îÉϲãµÄÎļþϵͳÊÇ¿ÉдµÄ¡£µ±ÐèÒªÐÞ¸ÄÒ»¸öÎļþʱ£¬AUFS´´½¨¸ÃÎļþµÄÒ»¸ö¸±±¾£¬Ê¹ÓÃCoW½«Îļþ´ÓÖ»¶Á²ã¸´ÖƵ½¿Éд²ã½øÐÐÐ޸쬽á¹ûÒ²±£´æÔÚ¿Éд²ã¡£ÔÚDockerÖУ¬µ×ϵÄÖ»¶Á²ã¾ÍÊÇimage£¬¿Éд²ã¾ÍÊÇContainer¡£½á¹¹ÈçÏÂͼËùʾ£º

Àý×Ó
ÔËÐÐÒ»¸öʵÀýÓ¦ÓÃÊÇɾ³ýÒ»¸öÎļþ/etc/shadow£¬¿´aufsµÄ½á¹û
# docker run centos
rm /etc/shadow
# ls -la /var/lib/docker/aufs/diff/$(docker ps
--no-trunc -lq)/etc
total 8
drwxr-xr-x 2 root root 4096 Sep 2 18:35 .
drwxr-xr-x 5 root root 4096 Sep 2 18:35 ..
-r--r--r-- 2 root root 0 Sep 2 18:35 .wh.shadow |
Ŀ¼½á¹¹
ÈÝÆ÷¹ÒÔØµã(Ö»ÓÐÈÝÆ÷ÔËÐÐʱ²Å±»¼ÓÔØ)
/var/lib/docker/aufs/mnt/$CONTAINER_ID/
·ÖÖ§(ºÍ¾µÏñ²»Í¬µÄÎļþ£¬Ö»¶Á»î×ŶÁд)
/var/lib/docker/aufs/diff/$CONTAINER_OR_IMAGE_ID/
¾µÏñË÷Òý±í(ÿ¸ö¾µÏñÒýÓþµÏñÃû)
/var/lib/docker/aufs/layers/
ÆäËû
AUFS Îļþϵͳ¿ÉʹÓõĴÅÅ̿ռä´óС
# df -h /var/lib/docker/
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 20G 4.0G 15G 22% /
|
ϵͳ¹ÒÔØ·½Ê½
Æô¶¯µÄ Docker

¶ÔÕÕϵͳ¹ÒÔØµã

·ÖÎö
ËäÈ»AUFSÊÇDocker µÚÒ»°æÖ§³ÖµÄ´æ´¢·½Ê½£¬µ«µ½ÏÖÔÚ»¹Ã»ÓмÓÈëÄÚºËÖ÷Ïß( centos ÎÞ·¨Ö±½ÓʹÓÃ)
´ÓÔÀí·ÖÎö¿´£¬AUFS mount()·½·¨ºÜ¿ì£¬ËùÒÔ´´½¨ÈÝÆ÷ºÜ¿ì£»¶Áд·ÃÎʶ¼¾ßÓб¾»úЧÂÊ£»Ë³Ðò¶ÁдºÍËæ»ú¶ÁдµÄÐÔÄÜ´óÓÚkvm£»²¢ÇÒDockerµÄAUFS¿ÉÒÔÓÐЧµÄʹÓô洢ºÍÄÚ´æ
¡£
AUFSÐÔÄÜÎȶ¨£¬²¢ÇÒÓдóÁ¿Éú²ú²¿Ê𼰷ḻµÄÉçÇøÖ§³Ö
²»Ö§³Örenameϵͳµ÷Óã¬Ö´ÐС°copy¡±ºÍ¡°unlink¡±Ê±£¬»áµ¼ÖÂʧ°Ü¡£
µ±Ð´Èë´óÎļþµÄʱºò(±ÈÈçÈÕÖ¾»òÕßÊý¾Ý¿âµÈ)¶¯Ì¬mount¶àĿ¼·¾¶µÄÎÊÌâ,µ¼ÖÂbranchÔ½¶à£¬²éÕÒÎļþµÄÐÔÄÜÒ²¾ÍÔ½Âý¡£(½â¾ö°ì·¨:ÖØÒªÊý¾ÝÖ±½ÓʹÓÃ
-v ²ÎÊý¹ÒÔØ¡£)
Device mapper
Device mapperÊÇLinuxÄÚºË2.6.9ºóÖ§³ÖµÄ£¬ÌṩµÄÒ»ÖÖ´ÓÂß¼É豸µ½ÎïÀíÉ豸µÄÓ³Éä¿ò¼Ü»úÖÆ£¬ÔڸûúÖÆÏ£¬Óû§¿ÉÒԺܷ½±ãµÄ¸ù¾Ý×Ô¼ºµÄÐèÒªÖÆ¶¨ÊµÏÖ´æ´¢×ÊÔ´µÄ¹ÜÀí²ßÂÔ¡£DockerµÄDevice
mapperÀûÓà Thin provisioning snapshot¹ÜÀí¾µÏñºÍÈÝÆ÷¡£
Thin-provisioning Snapshot
SnapshotÊÇLvmÌṩµÄÒ»ÖÖÌØÐÔ£¬Ëü¿ÉÒÔÔÚ²»ÖжϷþÎñÔËÐеÄÇé¿öÏÂΪthe origin£¨original
device£©´´½¨Ò»¸öÐéÄâ¿ìÕÕ(Snapshot)¡£Thin-ProvisioningÊÇÒ»ÏîÀûÓÃÐéÄ⻯·½·¨¼õÉÙÎïÀí´æ´¢²¿ÊðµÄ¼¼Êõ¡£Thin-provisioning
SnapshotÊǽáºÏThin-ProvisioningºÍSnapshotingÁ½ÖÖ¼¼Êõ£¬ÔÊÐí¶à¸öÐéÄâÉ豸ͬʱ¹ÒÔØµ½Ò»¸öÊý¾Ý¾íÒÔ´ïµ½Êý¾Ý¹²ÏíµÄÄ¿µÄ¡£Thin-Provisioning
SnapshotµÄÌØµãÈçÏ£º
¿ÉÒÔ½«²»Í¬µÄsnaptshot¹ÒÔØµ½Í¬Ò»¸öthe originÉÏ£¬½ÚÊ¡ÁË´ÅÅ̿ռ䡣
µ±¶à¸öSnapshot¹ÒÔØµ½ÁËͬһ¸öthe originÉÏ£¬²¢ÔÚthe originÉÏ·¢Éúд²Ù×÷ʱ£¬½«»á´¥·¢COW²Ù×÷¡£ÕâÑù²»»á½µµÍЧÂÊ¡£
Thin-Provisioning SnapshotÖ§³ÖµÝ¹é²Ù×÷£¬¼´Ò»¸öSnapshot¿ÉÒÔ×÷ΪÁíÒ»¸öSnapshotµÄthe
origin£¬ÇÒûÓÐÉî¶ÈÏÞÖÆ¡£
ÔÚSnapshotÉÏ¿ÉÒÔ´´½¨Ò»¸öÂß¼¾í£¬Õâ¸öÂß¼¾íÔÚʵ¼Êд²Ù×÷£¨COW£¬Snapshotд²Ù×÷£©·¢Éú֮ǰÊDz»Õ¼ÓôÅÅ̿ռäµÄ¡£
Ïà±ÈAUFSºÍOverlayFSÊÇÎļþ¼¶´æ´¢£¬Device mapperÊǿ鼶´æ´¢£¬ËùÓеIJÙ×÷¶¼ÊÇÖ±½Ó¶Ô¿é½øÐвÙ×÷£¬¶ø²»ÊÇÎļþ¡£Device
mapperÇý¶¯»áÏÈÔÚ¿éÉ豸ÉÏ´´½¨Ò»¸ö×ÊÔ´³Ø£¬È»ºóÔÚ×ÊÔ´³ØÉÏ´´½¨Ò»¸ö´øÓÐÎļþϵͳµÄ»ù±¾É豸£¬ËùÓоµÏñ¶¼ÊÇÕâ¸ö»ù±¾É豸µÄ¿ìÕÕ£¬¶øÈÝÆ÷ÔòÊǾµÏñµÄ¿ìÕÕ¡£ËùÒÔÔÚÈÝÆ÷Àï¿´µ½ÎļþϵͳÊÇ×ÊÔ´³ØÉÏ»ù±¾É豸µÄÎļþϵͳµÄ¿ìÕÕ£¬²¢Ã»ÓÐΪÈÝÆ÷·ÖÅä¿Õ¼ä¡£µ±ÒªÐ´ÈëÒ»¸öÐÂÎļþʱ£¬ÔÚÈÝÆ÷µÄ¾µÏñÄÚΪÆä·ÖÅäеĿ鲢дÈëÊý¾Ý£¬Õâ¸ö½ÐÓÃʱ·ÖÅä¡£µ±ÒªÐÞ¸ÄÒÑÓÐÎļþʱ£¬ÔÙʹÓÃCoWΪÈÝÆ÷¿ìÕÕ·ÖÅä¿é¿Õ¼ä£¬½«ÒªÐ޸ĵÄÊý¾Ý¸´ÖƵ½ÔÚÈÝÆ÷¿ìÕÕÖÐеĿéÀïÔÙ½øÐÐÐ޸ġ£Device
mapper Çý¶¯Ä¬Èϻᴴ½¨Ò»¸ö100GµÄÎļþ°üº¬¾µÏñºÍÈÝÆ÷¡£Ã¿Ò»¸öÈÝÆ÷±»ÏÞÖÆÔÚ10G´óСµÄ¾íÄÚ£¬¿ÉÒÔ×Ô¼ºÅäÖõ÷Õû¡£½á¹¹ÈçÏÂͼËùʾ£º

¿ÉÒÔͨ¹ý"docker info"»òͨ¹ýdmsetup
ls»ñÈ¡ÏëÒªµÄ¸ü¶àÐÅÏ¢¡£²é¿´dockerµÄDevice mapperµÄÐÅÏ¢£º

·ÖÎö
Device mapperÎļþϵͳ¼æÈÝÐԱȽϺ㬲¢ÇҴ洢Ϊһ¸öÎļþ£¬¼õÉÙÁËinodeÏûºÄ¡£
ÿ´ÎÒ»¸öÈÝÆ÷дÊý¾Ý¶¼ÊÇÒ»¸öп飬¿é±ØÐë´Ó³ØÖзÖÅ䣬տÕýдµÄʱºòÊÇÏ¡ËÉÎļþ,ËäÈ»ËüµÄÀûÓÃÂʺܸߣ¬µ«ÐÔÄܲ»ºÃ£¬ÒòΪ¶îÍâÔö¼ÓÁËvfs¿ªÏú¡£
ÿ¸öÈÝÆ÷¶¼ÓÐ×Ô¼ºµÄ¿éÉ豸ʱ£¬ËüÃÇÊÇÕæÕýµÄ´ÅÅÌ´æ´¢£¬ËùÒÔµ±Æô¶¯N¸öÈÝÆ÷ʱ£¬Ëü¶¼»á´Ó´ÅÅ̼ÓÔØN´Îµ½ÄÚ´æÖУ¬ÏûºÄÄÚ´æ´ó¡£
DockerµÄDevice mapperĬÈÏģʽÊÇloop-lvm£¬ÐÔÄÜ´ï²»µ½Éú²úÒªÇó¡£ÔÚÉú²ú»·¾³ÍƼödirect-lvmģʽֱ½ÓдԿéÉ豸£¬ÐÔÄܺá£
OverlayFS
OverlayÊÇLinuxÄÚºË3.18ºóÖ§³ÖµÄ£¬Ò²ÊÇÒ»ÖÖUnion FS£¬ºÍAUFSµÄ¶à²ã²»Í¬µÄÊÇOverlayÖ»ÓÐÁ½²ã£ºÒ»¸öupperÎļþϵͳºÍÒ»¸ölowerÎļþϵͳ£¬·Ö±ð´ú±íDockerµÄ¾µÏñ²ãºÍÈÝÆ÷²ã¡£µ±ÐèÒªÐÞ¸ÄÒ»¸öÎļþʱ£¬Ê¹ÓÃCoW½«Îļþ´ÓÖ»¶ÁµÄlower¸´ÖƵ½¿ÉдµÄupper½øÐÐÐ޸쬽á¹ûÒ²±£´æÔÚupper²ã¡£ÔÚDockerÖУ¬µ×ϵÄÖ»¶Á²ã¾ÍÊÇimage£¬¿Éд²ã¾ÍÊÇContainer¡£½á¹¹ÈçÏÂͼËùʾ£º

·ÖÎö
´Ókernel3.18½øÈëÖ÷Á÷LinuxÄںˡ£Éè¼Æ¼òµ¥£¬Ëٶȿ죬±ÈAUFSºÍDevice mapperËٶȿ졣ÔÚijЩÇé¿öÏ£¬Ò²±ÈBtrfsËٶȿ졣ÊÇDocker´æ´¢·½Ê½Ñ¡ÔñµÄδÀ´¡£ÒòΪOverlayFSÖ»ÓÐÁ½²ã£¬²»ÊǶà²ã£¬ËùÒÔOverlayFS
¡°copy-up¡±²Ù×÷¿ìÓÚAUFS¡£ÒÔ´Ë¿ÉÒÔ¼õÉÙ²Ù×÷ÑÓʱ¡£
OverlayFSÖ§³ÖÒ³»º´æ¹²Ïí£¬¶à¸öÈÝÆ÷·ÃÎÊͬһ¸öÎļþÄܹ²ÏíÒ»¸öÒ³»º´æ£¬ÒÔ´ËÌá¸ßÄÚ´æÊ¹ÓÃÂÊ¡£
OverlayFSÏûºÄinode£¬Ëæ×žµÏñºÍÈÝÆ÷Ôö¼Ó£¬inode»áÓöµ½Æ¿¾±¡£Overlay2Äܽâ¾öÕâ¸öÎÊÌâ¡£ÔÚOverlayÏ£¬ÎªÁ˽â¾öinodeÎÊÌ⣬¿ÉÒÔ¿¼Âǽ«/var/lib/docker¹ÒÔÚµ¥¶ÀµÄÎļþϵͳÉÏ£¬»òÕßÔö¼ÓϵͳinodeÉèÖá£
ÓмæÈÝÐÔÎÊÌâ¡£open(2)Ö»Íê³É²¿·ÖPOSIX±ê×¼£¬OverlayFSµÄijЩ²Ù×÷²»·ûºÏPOSIX±ê×¼¡£ÀýÈ磺
µ÷ÓÃfd1=open("foo", ORDONLY) £¬È»ºóµ÷ÓÃfd2=open("foo",
ORDWR) Ó¦ÓÃÆÚÍûfd1 ºÍfd2ÊÇͬһ¸öÎļþ¡£È»ºóÓÉÓÚ¸´ÖƲÙ×÷·¢ÉúÔÚµÚÒ»¸öopen(2)²Ù×÷ºó£¬ËùÒÔÈÏΪÊÇÁ½¸ö²»Í¬µÄÎļþ¡£
²»Ö§³Örenameϵͳµ÷Óã¬Ö´ÐС°copy¡±ºÍ¡°unlink¡±Ê±£¬½«µ¼ÖÂʧ°Ü¡£
Btrfs
Btrfs±»³ÆÎªÏÂÒ»´úдʱ¸´ÖÆÎļþϵͳ£¬²¢ÈëLinuxÄںˣ¬Ò²ÊÇÎļþ¼¶¼¶´æ´¢£¬µ«¿ÉÒÔÏñDevice
mapperÒ»Ö±½Ó²Ù×÷µ×²ãÉ豸¡£BtrfsÀûÓà subvolumesºÍsnapshots¹ÜÀí¾µÏñÈÝÆ÷·Ö²ã¡£Btrfs°ÑÎļþϵͳµÄÒ»²¿·ÖÅäÖÃΪһ¸öÍêÕûµÄ×ÓÎļþϵͳ£¬³ÆÖ®Îªsubvolume
£¬snapshotÊÇsubvolumnµÄʵʱ¶Áд¿½±´£¬chunkÊÇ·ÖÅ䵥λ£¬Í¨³£ÊÇ1GB¡£ÄÇô²ÉÓÃ
subvolume£¬Ò»¸ö´óµÄÎļþϵͳ¿ÉÒÔ±»»®·ÖΪ¶à¸ö×ÓÎļþϵͳ£¬ÕâЩ×ÓÎļþϵͳ¹²Ïíµ×²ãµÄÉ豸¿Õ¼ä£¬ÔÚÐèÒª´ÅÅ̿ռäʱ±ã´Óµ×²ãÉ豸ÖзÖÅ䣬ÀàËÆÓ¦ÓóÌÐòµ÷ÓÃ
malloc()·ÖÅäÄÚ´æÒ»Ñù¡£ÎªÁËÁé»îÀûÓÃÉ豸¿Õ¼ä£¬Btrfs ½«´ÅÅ̿ռ仮·ÖΪ¶à¸öchunk ¡£Ã¿¸öchunk¿ÉÒÔʹÓò»Í¬µÄ´ÅÅ̿ռä·ÖÅä²ßÂÔ¡£±ÈÈçijЩchunkÖ»´æ·Åmetadata£¬Ä³Ð©chunkÖ»´æ·ÅÊý¾Ý¡£ÕâÖÖÄ£ÐÍÓкܶàÓŵ㣬±ÈÈçBtrfsÖ§³Ö¶¯Ì¬Ìí¼ÓÉ豸¡£Óû§ÔÚϵͳÖÐÔö¼ÓеĴÅÅÌÖ®ºó£¬¿ÉÒÔʹÓÃBtrfsµÄÃüÁ¸ÃÉ豸Ìí¼Óµ½ÎļþϵͳÖС£Btrfs°ÑÒ»¸ö´óµÄÎļþϵͳµ±³ÉÒ»¸ö×ÊÔ´³Ø£¬ÅäÖóɶà¸öÍêÕûµÄ×ÓÎļþϵͳ£¬»¹¿ÉÒÔÍù×ÊÔ´³ØÀï¼ÓеÄ×ÓÎļþϵͳ£¬¶ø»ù´¡¾µÏñÔòÊÇ×ÓÎļþϵͳµÄ¿ìÕÕ£¬Ã¿¸ö×Ó¾µÏñºÍÈÝÆ÷¶¼ÓÐ×Ô¼ºµÄ¿ìÕÕ£¬ÕâЩ¿ìÕÕÔò¶¼ÊÇsubvolumeµÄ¿ìÕÕ¡£

·ÖÎö
BtrfsÊÇÌæ»»Device mapperµÄÏÂÒ»´úÎļþϵͳ£¬ ºÜ¶à¹¦ÄÜ»¹ÔÚ¿ª·¢½×¶Î£¬»¹Ã»Óз¢²¼Õýʽ°æ±¾£¬Ïà±ÈEXT4»òÆäËü¸ü³ÉÊìµÄÎļþϵͳ£¬ËüÔÚ¼¼Êõ·½ÃæµÄÓÅÊÆ°üÀ¨·á¸»µÄÌØÕ÷£¬È磺֧³Ö×Ó¾í¡¢¿ìÕÕ¡¢ÎļþϵͳÄÚÖÃѹËõºÍÄÚÖÃRAIDÖ§³ÖµÈ¡£
²»Ö§³ÖÒ³»º´æ¹²Ïí£¬N¸öÈÝÆ÷·ÃÎÊÏàͬµÄÎļþÐèÒª»º´æN´Î¡£²»ÊʺϸßÃܶÈÈÝÆ÷³¡¾°¡£
µ±Ç°Btrfs°æ±¾Ê¹Óá°small writes¡±,µ¼ÖÂÐÔÄÜÎÊÌâ¡£²¢ÇÒÐèҪʹÓÃBtrfsÔÉúÃüÁîbtrfs
filesys showÌæ´údf
BtrfsʹÓá°journaling¡±Ð´Êý¾Ýµ½´ÅÅÌ£¬Õ⽫ӰÏì˳ÐòдµÄÐÔÄÜ¡£
BtrfsÎļþϵͳ»áÓÐË鯬£¬µ¼ÖÂÐÔÄÜÎÊÌâ¡£µ±Ç°Btrfs°æ±¾£¬ÄÜͨ¹ýmountʱָ¶¨autodefrag
×ö¼ì²âËæ»úдºÍË鯬ÕûÀí¡£
ZFS
ZFS ÎļþϵͳÊÇÒ»¸ö¸ïÃüÐÔµÄȫеÄÎļþϵͳ£¬Ëü´Ó¸ù±¾ÉϸıäÁËÎļþϵͳµÄ¹ÜÀí·½Ê½£¬ZFS ÍêÈ«ÅׯúÁË¡°¾í¹ÜÀí¡±£¬²»ÔÙ´´½¨ÐéÄâµÄ¾í£¬¶øÊǰÑËùÓÐÉ豸¼¯Öе½Ò»¸ö´æ´¢³ØÖÐÀ´½øÐйÜÀí£¬Óá°´æ´¢³Ø¡±µÄ¸ÅÄîÀ´¹ÜÀíÎïÀí´æ´¢¿Õ¼ä¡£¹ýÈ¥£¬Îļþϵͳ¶¼Êǹ¹½¨ÔÚÎïÀíÉ豸֮Éϵġ£ÎªÁ˹ÜÀíÕâЩÎïÀíÉ豸£¬²¢ÎªÊý¾ÝÌṩÈßÓ࣬¡°¾í¹ÜÀí¡±µÄ¸ÅÄîÌṩÁËÒ»¸öµ¥É豸µÄÓ³Ïñ¡£¶øZFS´´½¨ÔÚÐéÄâµÄ£¬±»³ÆÎª¡°zpools¡±µÄ´æ´¢³ØÖ®ÉÏ¡£Ã¿¸ö´æ´¢³ØÓÉÈô¸ÉÐéÄâÉ豸£¨virtual
devices£¬vdevs£©×é³É¡£ÕâЩÐéÄâÉ豸¿ÉÒÔÊÇÔʼ´ÅÅÌ£¬Ò²¿ÉÄÜÊÇÒ»¸öRAID1¾µÏñÉ豸£¬»òÊǷDZê×¼RAIDµÈ¼¶µÄ¶à´ÅÅÌ×é¡£ÓÚÊÇzpoolÉϵÄÎļþϵͳ¿ÉÒÔʹÓÃÕâЩÐéÄâÉ豸µÄ×Ü´æ´¢ÈÝÁ¿¡£DockerµÄZFSÀûÓÃsnapshotsºÍclones£¬ËüÃÇÊÇZFSµÄʵʱ¿½±´£¬snapshotsÊÇÖ»¶ÁµÄ£¬clonesÊǶÁдµÄ£¬clones´Ósnapshot´´½¨¡£
ÏÂÃæ¿´Ò»ÏÂÔÚDockerÀïZFSµÄʹÓá£Ê×ÏÈ´ÓzpoolÀï·ÖÅäÒ»¸öZFSÎļþϵͳ¸ø¾µÏñµÄ»ù´¡²ã£¬¶øÆäËû¾µÏñ²ãÔòÊÇÕâ¸öZFSÎļþϵͳ¿ìÕյĿË¡£¬¿ìÕÕÊÇÖ»¶ÁµÄ£¬¶ø¿Ë¡ÊÇ¿ÉдµÄ£¬µ±ÈÝÆ÷Æô¶¯Ê±ÔòÔÚ¾µÏñµÄ×î¶¥²ãÉú³ÉÒ»¸ö¿Éд²ã¡£ÈçÏÂͼËùʾ£º

·ÖÎö
ZFSͬ BtrfsÀàËÆÊÇÏÂÒ»´úÎļþϵͳ¡£ZFSÔÚLinux(ZoL)portÊdzÉÊìµÄ£¬µ«²»ÍƼöÔÚÉú²ú»·¾³ÉÏʹÓÃDockerµÄ
ZFS´æ´¢·½Ê½£¬³ý·ÇÄãÓÐZFSÎļþϵͳµÄ¾Ñé¡£
¾¯ÌèZFSÄÚ´æÎÊÌ⣬ÒòΪ£¬ZFS×î³õÊÇΪÁËÓдóÁ¿ÄÚ´æµÄSun Solaris·þÎñÆ÷¶øÉè¼Æ ¡£
ZFSµÄ¡°deduplication¡±ÌØÐÔ£¬ÒòΪռÓôóÁ¿ÄÚ´æ£¬ÍÆ¼ö¹Øµô¡£µ«Èç¹ûʹÓÃSAN£¬NAS»òÕ߯äËûÓ²ÅÌRAID¼¼Êõ£¬¿ÉÒÔ¼ÌÐøÊ¹ÓôËÌØÐÔ¡£
ZFS cachingÌØÐÔÊʺϸßÃܶȳ¡¾°¡£
ZFSµÄ128K¿éд£¬intent log¼°ÑÓ³Ùд¿ÉÒÔ¼õÉÙË鯬²úÉú¡£
ºÍZFS FUSEʵÏֶԱȣ¬ÍƼöʹÓÃLinuxÔÉúZFSÇý¶¯¡£
µÚËIJ¿·Ö ×ܽá
ÁíÍ⣬ÏÂͼÁгöDocker¸÷ÖÖ´æ´¢·½Ê½µÄÓŵãȱµã£º

ÒÔÉÏÊÇÎåÖÖDocker´æ´¢·½Ê½µÄ½éÉܼ°·ÖÎö£¬ÒÔ´ËΪÀíÂÛÒÀ¾Ý£¬Ñ¡Ôñ×Ô¼ºµÄDocker´æ´¢·½Ê½¡£Í¬Ê±¿ÉÒÔ×öһЩÑéÖ¤²âÊÔ£ºÈçIOÐÔÄܲâÊÔ£¬ÒÔ´ËÈ·¶¨ÊʺÏ×Ô¼ºÓ¦Óó¡¾°µÄ´æ´¢·½Ê½¡£Í¬Ê±£¬ÓÐÁ½µãÖµµÃÌá³ö£º
ʹÓÃSSD(Solid State Devices)´æ´¢£¬Ìá¸ßÐÔÄÜ¡£
¿¼ÂÇʹÓÃÊý¾Ý¾í¹ÒÔØÌá¸ßÐÔÄÜ¡£ |