0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SONiCAdvent Calendar 2020

Day 3

SONiCのファイルシステムレイアウト

Last updated at Posted at 2020-12-03

はじめに

SONiCは通常よくあるPC向けLinux distributionと同様に、ストレージにインストールされ、それをmountして動作します。ディレクトリ構造も同様です。しかし、その内訳となるファイルシステムのありかたはやや特殊です。知っていてもあまり役に立たないかもしれませんが、主要なものをだらだら紹介します。

例示しているテキストはSONiC-VS(仮想マシン)のものなので、実機だとデバイス名など(/dev/vda3とか)微妙に異なることがあります。予めご了承ください。

/

SONiCの各種バイナリファイルはsquashfsのイメージファイル内にあります。これをread onlyで/mountしてさらにoverlayfsでストレージの読み書き可能ディレクトリを重ねてmountしています。

dmesg
[    0.000000] Command line: BOOT_IMAGE=/image-master.0-329fcfae2/boot/vmlinuz-4.19.0-9-2-amd64 root=UUID=d1113aaf-6c15-4ca0-82f5-c215b2844078 rw console=tty0 console=ttyS0,115200n8 quiet net.ifnames=0 biosdevname=0 loop=image-master.0-329fcfae2/fs.squashfs loopfstype=squashfs apparmor=1 security=apparmor varlog_size=4096 usbcore.autosuspend=-1
mount
root-overlay on / type overlay (rw,relatime,lowerdir=/root,upperdir=/root/host/image-master.0-329fcfae2/rw,workdir=/root/host/image-master.0-329fcfae2/work)

/host

各種の生ファイルは/hostの下に集められています。sonic-installerコマンドを使うとストレージ上に2つのバージョンのSONiCを置くことができるのですが(起動時にGRUBで選択可能)、ブートしなかったほうのSONiCで作成していたファイルも/hostに格納されていてアクセスが可能です。

mount
/dev/vda3 on /host type ext4 (rw,relatime)

前述したsquashfsのイメージも/hostの下に置かれています。
/hostにファイルを置いておくとsonic-installerコマンドによるイメージ更新時にも消去されないので、ちょっとした対比領域として便利に使えます。/etc/config-setup設定によるイメージ更新時のバックアップ・リストアにも使われます。

なお、/に重ねてmountされている読み書き可能ディレクトリは/host/image-バージョン文字列/rw/になります。

/var/log

ログファイルを格納する/var/logディレクトリはイメージ更新後も継続して参照できるようになっています。

mount
/host/disk-img/var-log.ext4 on /var/log type ext4 (rw,relatime)

標準的なLinuxのあれこれ

`/proc`, `/sys`, `/dev`といったディレクトリはSONiCでもふつうに`mount`されています。(長いので折りたたみ)

```:mount
sysfs on /sys type sysfs (rw,relatime)
proc on /proc type proc (rw,relatime)
udev on /dev type devtmpfs (rw,nosuid,relatime,size=1005900k,nr_inodes=251475,mo
de=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmod
e=000)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=204312k,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relat
ime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup2 on /sys/fs/cgroup/unified type cgroup2 (rw,nosuid,nodev,noexec,relatime,
nsdelegate)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xa
ttr,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
bpf on /sys/fs/bpf type bpf (rw,nosuid,nodev,noexec,relatime,mode=700)
cgroup on /sys/fs/cgroup/rdma type cgroup (rw,nosuid,nodev,noexec,relatime,rdma)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=30,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=11102)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
mqueue on /dev/mqueue type mqueue (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,pagesize=2M)
tracefs on /sys/kernel/debug/tracing type tracefs (rw,relatime)
```

/var/lib/docker

SONiCは各種機能をdockerコンテナ上で動かすのですが、専用領域として/var/lib/dockerを用意しています。

mount
/dev/vda3 on /var/lib/docker type ext4 (rw,relatime)
コンテナ設定 (無意味に長いので折りたたみ)

```
$ sudo ls /var/lib/docker/containers
0e063bc7b036bf5a395d98a51415ab59a0f3f8aac21c221bf8029bdea905c602
114c7dcc61aa07ce26a64bf1c7e4b0bf884b61c60b4e9e10ba96830e48acd487
32719356aae22e6044b1c03999976c8cf6332c2bf0a26d97f9f26aa693d58265
5a3b049561202bf79fce56542b92394c4bc06cff40891933c29a0bbcf14c627a
5e1b027404a9ce07a473b9116259d2739ae2b3d2e4bc01042070837c66092686
6817e874550a4ee3ac4a47e6e992bb8ae2e51816cec7e2a99738e0c76d1e3a7e
785abd190d98c61dcb3ea1964f73f253e35a179069587edb751a2b5bf66912be
7f532cd0da490b1341ca5a6cf34128d79f188361355fdd0b4491f26fed837484
b71c6536e18f570f6af84b4746d600d328970c92ade46161a92aed35e37db74e
c3b3bb5bbcdb43a8de1a55c233c5d6ed233a188325f636c6cc6df19fc27c12a8
cdc23150e7e5ce3112ac184e17faf0340ecf04137ae86134fb6f2f7de2add006
d25722a28e82b3f186a360206b65d8e1610d7ec6b9687328a856941a5d5df2cc
f0c53e238be406db65af81b0ad30a9f481ec5952ed9cd991969d1367079eeeb3
ffacc142b2e4388b3140df27b143a68a5528ad799658204088f4adfca1693aaf
```

オーバーレイファイルシステム (無意味に長いので折りたたみ)

```
$ sudo ls /var/lib/docker/overlay2
07e02732532df6da26e2e3911c50efdedd71e925a0ebe6b280bd9973e52f8499
08ae910c8ab3db21b5db24725b72f7435c29372e751d4270aee8380a6d1136a3
0a78c7fbfe38b83eec1c339bd4f8f9958ac412130d05565ed4327b6f85ef06b1
0a78c7fbfe38b83eec1c339bd4f8f9958ac412130d05565ed4327b6f85ef06b1-init
151510f3c7b5eca106617c94ffb8982907abef05c56c67384292b28ab5c48cc9
1acf21d8331977ac0a89e8594bcdffcadba356bca955684d4e1a6c3f4e1e9f06
23ce3a658d154122a79bf5843952f25c4d80e5fe3bc40652a95654459d16b9e3
23ce3a658d154122a79bf5843952f25c4d80e5fe3bc40652a95654459d16b9e3-init
24072f2cadcc58fe694918db2ab2a5ccbe1e52f10f69528df4989ef1ce103334
24072f2cadcc58fe694918db2ab2a5ccbe1e52f10f69528df4989ef1ce103334-init
32d655064a873b3b8fd3b67100310f3e9c408db1d4f8011f9d883e2183a422d9
3d5c975f1b3f52c1672c143efa4092fd622106ff05d2f331564b30062d839d67
3da6f4e71f3674497899444df2bcbed38e79e07ea7feaa4e1bdc134154a53bb1
3da6f4e71f3674497899444df2bcbed38e79e07ea7feaa4e1bdc134154a53bb1-init
4514b1183eb0310464761c546e75544d00ae76a5d632a04ddf831f5cc1e10274
4cf6acae7488d8f848b9ceba754ddcf850aea0a53b027c29b35446f079126768
52577e407eb0e8f68c04ee0ba0672690a63e0cedeedcde83702e8bc839ea06fb
68d12880487b6454ae888f41c4ce0b9e0d3a9d729c94680c6be1fdde580c62c6
69b32fc4f5f161ffe19773c1682dc12955d43bf7b85ddbb92bbee1d16968c449
69b32fc4f5f161ffe19773c1682dc12955d43bf7b85ddbb92bbee1d16968c449-init
6efb83d708bf748aec411f306fe0e5a3e1d54f23aa93c4981abb51701eaaba6e
72d64ba9d855c66ebd0ecdbb7e6388ee9ffc5f2a4696faafdb2751e3eeeb433b
72d64ba9d855c66ebd0ecdbb7e6388ee9ffc5f2a4696faafdb2751e3eeeb433b-init
7ca1b34b5326ff5c4aed38515016a62b02dedb89cbadb4b57c0587ae64fb958a
7da97c73a2a215de8df628a490e6324eb07ddeba87cd546c542ece109abc9828
7f8c53223b5da7d29d921d48d158ed371ed0807b2f58ee26d4a4a9a138d525c2
7f8c53223b5da7d29d921d48d158ed371ed0807b2f58ee26d4a4a9a138d525c2-init
90f042454b9dad58566a197a1a06aba37f9c51b26c476bcb48686b6d5a89ccbe
90f042454b9dad58566a197a1a06aba37f9c51b26c476bcb48686b6d5a89ccbe-init
997b2e86faba0b7708a521bdbdaf042599bf81c25ad90532e140115b94afe8db
997b3f2bd46e44decc3bfecfdf7f38531f068cfad2c11f1ccfb5ef551c08c1bb
9b62e7415e775e68adaaeb642852b2fa061789afad07e6c8f8af8f5c748b79bb
9b62e7415e775e68adaaeb642852b2fa061789afad07e6c8f8af8f5c748b79bb-init
b80bd1956e10ee96b28ef303f8a78135ddfe01fa1205c006ebb3f235a23df7d7
b80bd1956e10ee96b28ef303f8a78135ddfe01fa1205c006ebb3f235a23df7d7-init
bccd95d1d59fca2d5e8dce9f977aac92f798715d515136bc2078b7a25fbf6d69
c19fc0b7f905d89553568fa73848c2c74fe647cc888913d8b3d096987e5f422a
c23aaeca95843488d91490f8f80cf84a92213b077eaff1662fe014dc4a1dafa4
c7c7c7af057f83e7a7b3294bc713053dac8ec0e0da65313118e87045310824c6
c83063ed31e1423210db4df93849006b4bf76ac79dfa0a9216eb59f1c7d77de8
c83063ed31e1423210db4df93849006b4bf76ac79dfa0a9216eb59f1c7d77de8-init
d08c5aa8e47793dde8b44e948c1a2af3e503ea6cbaa7aec6176e7f34198f8d41
d08c5aa8e47793dde8b44e948c1a2af3e503ea6cbaa7aec6176e7f34198f8d41-init
da2f682045f63e1b66d2476e6938c437dd0b6138b9905bfb62ab3be20b530c3a
e8f68d0d732106557aede501a87f9bb17eb41dd96b9378517fe9b3993b5722fd
ec3b16704233ab79f7e54db1749de73b7d2e34030391efdecc111e08275486d1
f34731aa6b8334f97d89a02ca51c618af5eb1109cbb172b5c65ff0c7e2377ae9
f34731aa6b8334f97d89a02ca51c618af5eb1109cbb172b5c65ff0c7e2377ae9-init
f82e47e4f326b2e3c956e875581d7d3e40478e8cb68cffa5e7aa98d02ec1c1e5
f82e47e4f326b2e3c956e875581d7d3e40478e8cb68cffa5e7aa98d02ec1c1e5-init
l
```

他にもdocker関連の設定などが置かれています。

まとめ

/hostだけ覚えておけば、あとはあまり考えなくていいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?