Chromebook linux(crostini)のディスク
Chromebookにlinuxを入れると、ChromeOS(これもLinuxベースである)の中に「termina」というLinux VMが作られる。
Filesystem Size Used Avail Use% Mounted on
/dev/dm-2 170M 163M 0 100% /run/imageloader/cros-termina/11895.50.0
この中にtermina VM用のrootファイルシステムやカーネルイメージが置かれている。200MBもないくらい小さい。
# ls -hl /run/imageloader/cros-termina/11895.50.0/
total 163M
-rw-r--r--. 1 root root 1.1M Apr 5 06:43 about_os_credits.html
drwx------. 2 root root 16K Apr 5 06:43 lost+found
-rw-r--r--. 1 root root 759 Apr 5 06:43 lsb-release
-rw-r--r--. 1 root root 13M Apr 5 06:43 vm_kernel
-rw-r--r--. 1 root root 155M Apr 5 06:43 vm_rootfs.img
この「dm-2」の実体は、パーティションp1である/mnt/stateful_partitionのencrypted.blockのディスクイメージの中にある「chronos」ユーザのhomeにあるimage.ext4(178MB)である。かなりややこしい。
# dmsetup deps /dev/dm-2
1 dependencies : (7, 5)
# ls -l /dev/ |grep ' 7, *5 '
brw-rw----. 1 root disk 7, 5 Jul 7 18:01 loop5
# losetup /dev/loop5
/dev/loop5: [65025]:154415 (/cros-components/cros-termina/11895.50.0/image.ext4)
# find / -name image.ext4 -exec ls -hli {} \;
154415 -rw-r--r--. 1 chronos chronos 178M Jul 7 18:01 /home/chronos/cros-components/cros-termina/11895.50.0/image.ext4
154415 -rw-r--r--. 1 chronos chronos 178M Jul 7 18:01 /mnt/stateful_partition/encrypted/chronos/cros-components/cros-termina/11895.50.0/image.ext4
termina VMはlinuxではあるが、「ChromeOSのLinuxオプション機能」の本体ではない。temrina VMの中に更にlinuxコンテナ(lxc)が起動され、それが「Linuxオプション機能」の本体である。このliuxコンテナの名称は「penguin」であり、ディストリビューションはdebianである。penguinのディスクはterminaのrootファイルシステムにはない。
めちゃめちゃ暗号化機能と仮想機能を駆使しているのはセキュリティのためらしい。Arm A7xの2コアプロセッサ(RockChip OP1)でもキビキビ動くのは素晴らしいが、OSS部分のバグにあたると切り分けが大変そうだ。そのうち、OSS本家から派生したり、独自機能の開発に走るんではないか。
linuxコンテナpenguinのディスクはどこかというと多分以下。linuxをインストールして増えたディスク領域を探索したりの推定。
# ps -ef|grep crosvm |head -3
crosvm 15123 1 0 18:01 ? 00:00:02 /usr/bin/vm_concierge
crosvm 15156 15123 6 18:01 ? 00:04:41 /usr/bin/crosvm run --cpus 6 --mem 2859 --root /run/imageloader/cros-termina/11895.50.0/vm_rootfs.img --tap-fd 16 --cid 3 --socket /run/vm/vm.WVRIqj/crosvm.sock --wayland-sock /run/chrome/wayland-0 --cras-audio --params snd_intel8x0.inside_vm=1 snd_intel8x0.ac97_clock=48000 --wayland-dmabuf --rwdisk /home/root/e074c927b7a9xxxxxxxxxxxxxxxx34dc43e6e6/crosvm/dGVybWluYQ==.img /run/imageloader/cros-termina/11895.50.0/vm_kernel
crosvm 15157 15123 0 18:01 ? 00:00:00 /usr/bin/logger -p auth info --skip-empty --tag VM(3)
# pwd
/mnt/stateful_partition/home/.shadow/e074c927b7a9xxxxxxxxxxxxxxxxxxxxxxx34dc43e6e6/mount/root/crosvm
# ls -lh
total 1.5G
-rw-------. 1 crosvm crosvm 8.0G Jul 7 18:42 'dGVybWluYQ==.img'
drwx------. 2 crosvm crosvm 4.0K Jul 7 18:03 sshkeys
# du -sh *
1.5G dGVybWluYQ==.img
40K sshkeys
temirna VMに入って、ディスク構成をみてみる。 開発者モードでもterminaでrootになる方法がわからないのでうまく調べられない。 /dev/vdbがpenguinコンテナ用で/mnt/statefulにあるようだが見れない。 sshの鍵をどうにかすればみれるんかな
(termina) chronos@localhost ~ $ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 153M 150M 280K 100% /
devtmpfs 1.4G 0 1.4G 0% /dev
tmp 1.4G 0 1.4G 0% /tmp
run 1.4G 24K 1.4G 1% /run
shmfs 1.4G 0 1.4G 0% /dev/shm
var 1.4G 0 1.4G 0% /var
none 1.4G 0 1.4G 0% /sys/fs/cgroup
9p 1.9G 568K 1.9G 1% /mnt/shared
/dev/vdb 8.0G 1.5G 5.9G 20% /mnt/stateful
tmpfs 100K 0 100K 0% /mnt/stateful/lxd/shmounts
tmpfs 100K 0 100K 0% /mnt/stateful/lxd/devlxd
(termina) chronos@localhost ~ $ ls -l /mnt/stateful/
total 0
drwx--x--x 1 root root 256 Jul 7 09:02 lxd
drwxr-xr-x 1 chronos chronos 0 Jul 7 09:02 lxd_conf
(termina) chronos@localhost ~ $ ls -la /mnt/stateful/*
ls: cannot open directory '/mnt/stateful/lxd': Permission denied
/mnt/stateful/lxd_conf:
total 16
drwxr-xr-x 1 chronos chronos 0 Jul 7 09:02 .
drwxr-xr-x 1 root root 22 Jul 7 09:02 ..
(termina) chronos@localhost ~ $ mount|grep lxd
tmpfs on /mnt/stateful/lxd/shmounts type tmpfs (rw,relatime,size=100k,mode=711)
tmpfs on /mnt/stateful/lxd/devlxd type tmpfs (rw,relatime,size=100k,mode=755)
run on /mnt/stateful/lxd/devices/penguin/disk.container_token.dev-.container_token type tmpfs (rw,nosuid,nodev,noexec,relatime,mode=755)
run on /mnt/stateful/lxd/devices/penguin/disk.cros_milestone.dev-.cros_milestone type tmpfs (rw,nosuid,nodev,noexec,relatime,mode=755)
run on /mnt/stateful/lxd/devices/penguin/disk.host-ip.dev-.host_ip type tmpfs (rw,nosuid,nodev,noexec,relatime,mode=755)
run on /mnt/stateful/lxd/devices/penguin/disk.ssh_authorized_keys.dev-.ssh-ssh_authorized_keys type tmpfs (rw,nosuid,nodev,noexec,relatime,mode=755)
run on /mnt/stateful/lxd/devices/penguin/disk.ssh_host_key.dev-.ssh-ssh_host_key type tmpfs (rw,nosuid,nodev,noexec,relatime,mode=755)
/dev/vda on /mnt/stateful/lxd/devices/penguin/disk.sshd_config.dev-.ssh-sshd_config type ext4 (ro,relatime,block_validity,delalloc,nojournal_checksum,barrier,user_xattr,acl)
9p on /mnt/stateful/lxd/devices/penguin/disk.shared.mnt-chromeos type 9p (rw,nosuid,nodev,noexec,relatime,sync,dirsync,access=any,trans=fd,rfd=25,wfd=25)
/dev/vda on /mnt/stateful/lxd/devices/penguin/disk.cros_containers.opt-google-cros-containers type ext4 (ro,relatime,block_validity,delalloc,nojournal_checksum,barrier,user_xattr,acl)
(termina) chronos@localhost ~ $ lxc storage list
+---------+-------------+--------+-----------------------------------------+---------+
| NAME | DESCRIPTION | DRIVER | SOURCE | USED BY |
+---------+-------------+--------+-----------------------------------------+---------+
| default | | btrfs | /mnt/stateful/lxd/storage-pools/default | 3 |
+---------+-------------+--------+-----------------------------------------+---------+
(termina) chronos@localhost ~ $ lxc storage info default
info:
description: ""
driver: btrfs
name: default
space used: 1.54GB
total space: 8.55GB
used by:
containers:
- penguin
images:
- 6b6816a3efxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx553267b983dcb
profiles:
- default