Chromebook linux(crostini)のディスク

Chromebooklinuxを入れると、ChromeOS(これもLinuxベースである)の中に「termina」というLinux VMが作られる。

バイスマッパのデバイス「dm-2」がつくられる。

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 VMlinuxではあるが、「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

ChromeOSのファイルシステム

ChromebookのOSはLinuxベースであるが、Debianなどの他のLinuxディストリビューションと比べると、ファイルシステム構成がかなり違う。


 1  Filesystem               Size  Used Avail Use% Mounted on
 2  /dev/root                1.7G  1.5G  160M  91% /
 3  devtmpfs                 1.9G     0  1.9G   0% /dev
 4  tmp                      1.9G  156K  1.9G   1% /tmp
 5  run                      1.9G  536K  1.9G   1% /run
 6  shmfs                    1.9G   15M  1.9G   1% /dev/shm
 7  /dev/mmcblk0p1            11G  768M  9.1G   8% /mnt/stateful_partition
 8  /dev/mmcblk0p8            12M   28K   12M   1% /usr/share/oem
 9  /dev/mapper/encstateful  3.1G   47M  3.0G   2% /mnt/stateful_partition/encrypted
10  media                    1.9G     0  1.9G   0% /media
11  none                     1.9G     0  1.9G   0% /sys/fs/cgroup
12  /dev/loop1               447M  447M     0 100% /opt/google/containers/android/rootfs/root
13  /dev/loop2               4.0K  4.0K     0 100% /opt/google/containers/arc-sdcard/mountpoints/container-root
14  /dev/loop3               4.0K  4.0K     0 100% /opt/google/containers/arc-obb-mounter/mountpoints/container-root
15  imageloader              1.9G     0  1.9G   0% /run/imageloader
16  tmpfs                    1.9G   12K  1.9G   1% /run/arc/oem
17  tmpfs                    1.9G     0  1.9G   0% /run/arc/sdcard
18  tmpfs                    1.9G     0  1.9G   0% /run/arc/obb
19  tmpfs                    1.9G     0  1.9G   0% /run/arc/media
20  tmpfs                    1.9G     0  1.9G   0% /run/arc/adbd
21  /dev/mmcblk1             3.7G  1.0M  3.7G   1% /media/removable/SD4G
22  drivefs                   11G  1.3G  9.1G  12% /media/fuse/drivefs-33427exxxxxxxxxxxxxxd3dacd7f
23  passthrough               11G  768M  9.1G   8% /run/arc/media/MyFiles
24  passthrough               11G  768M  9.1G   8% /run/arc/media/MyFiles-write
25  passthrough              1.9G     0  1.9G   0% /run/arc/media/removable-default
26  passthrough              1.9G     0  1.9G   0% /run/arc/media/removable-read
27  passthrough               11G  768M  9.1G   8% /run/arc/media/MyFiles-default
28  passthrough               11G  768M  9.1G   8% /run/arc/media/MyFiles-read
29  passthrough              1.9G     0  1.9G   0% /run/arc/media/removable
30  passthrough              1.9G     0  1.9G   0% /run/arc/media/removable-write
31  /dev/fuse                 11G  768M  9.1G   8% /run/arc/sdcard/default/emulated
32  /dev/fuse                 11G  768M  9.1G   8% /run/arc/sdcard/read/emulated
33  /dev/fuse                 11G  768M  9.1G   8% /run/arc/sdcard/write/emulated

 1  /dev/dm-0 on / type ext2 (ro,relatime,seclabel,block_validity,barrier,user_xattr,acl)
 2  devtmpfs on /dev type devtmpfs (rw,nosuid,noexec,relatime,seclabel,size=1951208k,nr_inodes=487802,mode=755)
 3  none on /proc type proc (rw,nosuid,nodev,noexec,relatime)
 4  none on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
 5  none on /sys/fs/selinux type selinuxfs (rw,nosuid,noexec,relatime)
 6  tmp on /tmp type tmpfs (rw,nosuid,nodev,noexec,relatime,seclabel)
 7  run on /run type tmpfs (rw,nosuid,nodev,noexec,relatime,seclabel,mode=755)
 8  debugfs on /sys/kernel/debug type debugfs (rw,nosuid,nodev,noexec,relatime,seclabel,gid=605,mode=750)
 9  shmfs on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,seclabel)
10  devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)
11  configfs on /sys/kernel/config type configfs (rw,nosuid,nodev,noexec,relatime)
12  /dev/mmcblk0p1 on /mnt/stateful_partition type ext4 (rw,nosuid,nodev,noexec,noatime,seclabel,resgid=20119,commit=600,data=ordered)
13  /dev/mmcblk0p8 on /usr/share/oem type ext4 (ro,nosuid,nodev,noexec,relatime,seclabel,data=ordered)
14  /dev/mmcblk0p1 on /home type ext4 (rw,nosuid,nodev,noexec,noatime,seclabel,resgid=20119,commit=600,data=ordered)
15  /dev/mapper/encstateful on /mnt/stateful_partition/encrypted type ext4 (rw,nosuid,nodev,noexec,noatime,seclabel,discard,commit=600,data=ordered)
16  /dev/mapper/encstateful on /var type ext4 (rw,nosuid,nodev,noexec,noatime,seclabel,discard,commit=600,data=ordered)
17  /dev/mapper/encstateful on /home/chronos type ext4 (rw,nosuid,nodev,noexec,noatime,seclabel,discard,commit=600,data=ordered)
18  run on /var/run type tmpfs (rw,nosuid,nodev,noexec,relatime,seclabel,mode=755)
19  run on /var/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,seclabel,mode=755)
20  run on /run/daemon-store/usb_bouncer type tmpfs (rw,nosuid,nodev,noexec,relatime,seclabel,mode=755)
21  media on /media type tmpfs (rw,nosuid,nodev,noexec,relatime,seclabel)
22  tracefs on /sys/kernel/debug/tracing type tracefs (rw,nosuid,nodev,noexec,relatime,seclabel)
23  /dev/mmcblk0p1 on /usr/local type ext4 (rw,nodev,noatime,seclabel,resgid=20119,commit=600,data=ordered)
24  pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime,seclabel)
25  none on /sys/fs/cgroup type tmpfs (rw,nosuid,nodev,noexec,relatime,seclabel,mode=755)
26  cgroup on /sys/fs/cgroup/cpu type cgroup (rw,nosuid,nodev,noexec,relatime,cpu)
27  /opt/google/containers/android/system.raw.img on /opt/google/containers/android/rootfs/root type squashfs (ro,nosuid,nodev,noexec,relatime,seclabel)
28  /opt/google/containers/arc-sdcard/rootfs.squashfs on /opt/google/containers/arc-sdcard/mountpoints/container-root type squashfs (ro,nosuid,noexec,relatime,seclabel)
29  /opt/google/containers/arc-obb-mounter/rootfs.squashfs on /opt/google/containers/arc-obb-mounter/mountpoints/container-root type squashfs (ro,nosuid,noexec,relatime,seclabel)
30  cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
31  cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
32  cgroup on /sys/fs/cgroup/cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct)
33  cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset,noprefix)
34  cgroup on /sys/fs/cgroup/schedtune type cgroup (rw,nosuid,nodev,noexec,relatime,schedtune)
35  imageloader on /run/imageloader type tmpfs (rw,nosuid,nodev,noexec,relatime,seclabel,mode=755)
36  debugfs on /run/debugfs_gpu type debugfs (rw,nosuid,nodev,noexec,relatime,seclabel,gid=605,mode=750)
37  tmpfs on /run/arc/oem type tmpfs (rw,nosuid,nodev,noexec,relatime,seclabel,mode=755)
38  tmpfs on /run/arc/sdcard type tmpfs (ro,nosuid,nodev,noexec,relatime,seclabel,mode=755)
39  tmpfs on /run/arc/obb type tmpfs (ro,nosuid,nodev,noexec,relatime,seclabel,mode=755)
40  debugfs on /run/arc/debugfs/sync type debugfs (rw,nosuid,nodev,noexec,relatime,seclabel,gid=605,mode=750)
41  tracefs on /run/arc/debugfs/tracing type tracefs (rw,nosuid,nodev,noexec,relatime,seclabel)
42  tmpfs on /run/arc/media type tmpfs (ro,nosuid,nodev,noexec,relatime,seclabel,mode=755,uid=655360,gid=656360)
43  tmpfs on /run/arc/adbd type tmpfs (rw,nosuid,nodev,noexec,relatime,seclabel,mode=770,uid=657360,gid=657360)
44  /dev/mmcblk0p1 on /home/chronos/user type ext4 (rw,nosuid,nodev,noexec,noatime,seclabel,resgid=20119,commit=600,data=ordered)
45  /dev/mmcblk0p1 on /home/chronos/u-e074c927b7a90d0a4f26d76f3af67034dc43e6e6 type ext4 (rw,nosuid,nodev,noexec,noatime,seclabel,resgid=20119,commit=600,data=ordered)
46  /dev/mmcblk0p1 on /home/user/e074cxxxxxxxxxxxxxxxxxxxxf3af67034dc43e6e6 type ext4 (rw,nosuid,nodev,noexec,noatime,seclabel,resgid=20119,commit=600,data=ordered)
47  /dev/mmcblk0p1 on /home/root/e074cxxxxxxxxxxxxxxxxxxxxf3af67034dc43e6e6 type ext4 (rw,nosuid,nodev,noexec,noatime,seclabel,resgid=20119,commit=600,data=ordered)
48  /dev/mmcblk0p1 on /home/chronos/u-e074cxxxxxxxxxxxxxxxxxxxxf3af67034dc43e6e6/MyFiles/Downloads type ext4 (rw,nosuid,nodev,noexec,noatime,seclabel,resgid=20119,commit=600,data=ordered)
49  /dev/mmcblk0p1 on /home/user/e074c9xxxxxxxxxxxxxxxxxxxx7034dc43e6e6/MyFiles/Downloads type ext4 (rw,nosuid,nodev,noexec,noatime,seclabel,resgid=20119,commit=600,data=ordered)
50  /dev/mmcblk0p1 on /home/chronos/user/MyFiles/Downloads type ext4 (rw,nosuid,nodev,noexec,noatime,seclabel,resgid=20119,commit=600,data=ordered)
51  /dev/mmcblk0p1 on /run/daemon-store/usb_bouncer/e074cxxxxxxxxxxxxxxxxxxxx7034dc43e6e6 type ext4 (rw,nosuid,nodev,noexec,noatime,seclabel,resgid=20119,commit=600,data=ordered)
52  /dev/mmcblk1 on /media/removable/SD4G type fuseblk (rw,nosuid,nodev,noexec,relatime,dirsync,user_id=302,group_id=302,default_permissions,allow_other)
53  drivefs on /media/fuse/drivefs-33427exxxxxxxxxxxxxxxxxxxx3dacd7f type fuse.drivefs (rw,nosuid,nodev,relatime,user_id=304,group_id=304,default_permissions,allow_other)
54  /dev/mmcblk0p1 on /opt/google/containers/android/rootfs/android-data type ext4 (rw,nosuid,nodev,noexec,noatime,seclabel,resgid=20119,commit=600,data=ordered)
55  passthrough on /run/arc/media/MyFiles type fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000,default_permissions,allow_other)
56  passthrough on /run/arc/media/MyFiles-write type fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000,default_permissions,allow_other)
57  passthrough on /run/arc/media/removable-default type fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000,default_permissions,allow_other)
58  passthrough on /run/arc/media/removable-read type fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000,default_permissions,allow_other)
59  passthrough on /run/arc/media/MyFiles-default type fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000,default_permissions,allow_other)
60  passthrough on /run/arc/media/MyFiles-read type fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000,default_permissions,allow_other)
61  passthrough on /run/arc/media/removable type fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000,default_permissions,allow_other)
62  passthrough on /run/arc/media/removable-write type fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000,default_permissions,allow_other)
63  /dev/fuse on /run/arc/sdcard/default/emulated type fuse (rw,nosuid,nodev,noexec,noatime,user_id=656383,group_id=656383,default_permissions,allow_other)
64  /dev/fuse on /run/arc/sdcard/read/emulated type fuse (rw,nosuid,nodev,noexec,noatime,user_id=656383,group_id=656383,default_permissions,allow_other)
65  /dev/fuse on /run/arc/sdcard/write/emulated type fuse (rw,nosuid,nodev,noexec,noatime,user_id=656383,group_id=656383,default_permissions,allow_other)

Chromebook (Asus C101)の内蔵ディスク

出荷時点にリセットしたときのディスク構成を調べた。

 (ASUS Chromebook Flip C101PA-OP1,  ChromeOS 74.0)

 

内蔵ディスク(eMMC)の容量は14.7GiB(14.7*1024^3)。

カタログ表記は16GB(16*1000^3))だが、HDDもSSDも歴史的に「GB」の単位がメモリやらdfコマンドの表記やらとは違い10進数ベース。

面倒なので以下「GB」は「1024^3」の方を指す。

 

内蔵ディスクは主に、2GBのrootパーティションと、10.5GBのその他パーティションから構成される。

14.7GiBのeMMCは普通のWindowsのように複数パーティションに分かれている。

一番大きなパーティションは10.5GBである(p1)。

ChromeOSのrootファイルシステム用のパーティションは2GB。バージョンアップ用にA面/B面持つので合計4GBを使う。

その他、起動カーネル領域など細々なパーティションもある。

 

10.5GBのメインパーティションはマウントされてから様々なテクニックでいろいろな用途向けに切り出されている。初期化直後で2GBが使用済。

まず p1というパーティションは /mnt/stateful_partitionというディレクトリにマウントされる。

/mnt/stateful_partitionの下にはencrypt.blockというファイルがあり、暗号化された仮想ディスクイメージのようである。初期化直後の名目ファイルサイズは3.1GBで、確保済ブロックサイズは0.1GB。このファイルは同じディレクトリの下のencrypted/というディレクトリの下にマウントされているっぽい。この下にはさらにvar/があり、これが/varにマウントされているようだ。home/もある。

mountコマンドを見ると他にもいろいろな手段で切り出されているようだが、詳細がつかめない。

使用量もなかなかつかめないが、初期化直後では1GB~2GB程度使うようである。何もしなくても少しづつ増えており、Chromeブラウザ/ChromeOS/Android App/GoogleDriveのキャッシュやパッチファイルをダウンロードしたりしているのはないかと思われる。Googleドライブに格納した写真や、一度ChromebookでインストールしたことのあるAndroidアプリは自動的にダウンロードされる。初期化後1時間経過時点で9GBが残っている。

初期化時点ではLinuxはインストールされない。

ちなみに、別パーティションであるrootファイルシステムはread-onlyでマウントされており、全容量1.7GB、使用済1.5GB、空き容量160MB、である。

 

フルブラウザ(Chrome)が起動でき、Googleストア(Play)を入れても2GBにおさめており、すごく小さいシステムである。

内蔵ディスク8GBのマシンも構築可能かもしれない。

 

ChromeOSのLinux用仮想ディスクはどこ?

うちのChromebookは内蔵ディスクが16GBしかない。Linux機能を使うと、仮想マシンが作られるが、そのディスク領域はどこにあるんだろうか?

ちなみに内訳は、ChromeOSがなんと1.7GBしかなく、Linuxに8.3GBも割り当てている。(Androidはこの外かな?)

 

ChromeOS                         /                     1.7GB

                                           (swap)           3.7GB

VM(termina)                       /                     0.2GB

                                           /mnt/statefull  8.3GB

Linux Container(penguin)   /                     8.3GB

 

Chromebookの本体ChromeOSのデバイスを開発者モードで確認してみる。

 

f:id:yasuoyamasaki:20190618004619p:plain

/dev

 

Asus chromebook C101PAの場合、/dev/mmcblk0が内蔵ディスク(eMMC)のようだ。「MMCのblock device #0」ということか。

MicroSD Cardを刺すと/dev/mmcblk1になる。

f:id:yasuoyamasaki:20190618004223p:plain

fdsik

dfやmount、ls /devの結果からの推測では、rootファイルシステムはLVMのようである。(dm-0)。lvmの状態は、、、

 

f:id:yasuoyamasaki:20190618004842p:plain

dmsetup info

/dev/dm-0は/dev/mmcblk0p3に依存している。2GBの第3パーティションがread-onlyのrootファイルシステムの本体のようである。rootファイルシステムは1.7GBである。少し減ってる。はて。

 

/dev/dm-2は/dev/loop5を経由して/run/imageloader/cros-termina/11895.50.0/というところに関連づけられている。

カーネルとかRAMDISKイメージのようなものがおいてある。ディレクトリ名からいって、これが仮想マシンの/bootだろうか?

 

なかなか凝ったファイルシステム構成をしていて追うのが難しい。。。

 

ChromebookでNetHack3.6.2をプレイする方法(ChromebookでArchLinuxを起動する方法)

f:id:yasuoyamasaki:20190614204740p:plain

NetHack3.6.0 (Human-N-Wizard)

Chromebookの標準LinuxであるDebian/Stretch(Arm64)では、nethackパッケージはバージョン3.6.0が用意されているが、ArchLinuxでは3.6.2がある。

 

・「ターミナル」アプリでLinuxが動かせる状況にする。(前記事参照)

ChromeブラウザでCtrl+Shift+Tを押して黒い画面を出す

・「vsh termina」と打つ。「chronos」と表示されたらよし。

・「lxc launch archlinux/current arch」と打つ。しばし時間がかかる。

・「lxc list」で「penguin」と「arch」の行に「running」と出ればOK.

・「lxc exec arch bash」とうつ。

・「pacman -S nethack

・「nethack」でnethack3.6.2が起動(2019/6)

f:id:yasuoyamasaki:20190614205604p:plain

lxc command @termina

ややこしいが、ChromebookのOSはLinuxだが、その中で別のLinux仮想マシンとして起動する仕組みになっている。この仮想マシンを「termina」という。ディレクトリを見る感じ、Gentoo Linuxぽいので、Chromebokの本体Linuxのスリム版(自由度を下げている)のようだ。その中で更に、Debian LInuxのコンテナが起動されているのが「Penguin」で「ターミナル」は「Penguin」にログインするようになってる。

 

ここで「termina」から「lxc」コマンドを使って、別のコンテナを作ったのが上記の操作。Googleのコンテナイメージ集から「ArchLinux/Current」を選択し、「arch」というコンテナ名でコンテナを作成した(lxc launchコマンド)。

 

中で動いているプロセスを見ると、penguinでは、ChromeOS関係ぽい特殊なプロセスが動いている。vmware toolsみたいなものだろう。コマンドベースのnethackを動かすぐらいなら問題ないが、ファイル共有などはうまく動かないかもしれない。

 

たぶん、ChromeOSはLinuxでない新しいGoogle製の新しいOSに変更されるのではないか。そして、terminaは現在のミニマルLinuxのままで、その下のLinuxコンテナとして、(1)Chromeブラウザが動くChromeOS、(2)Androidアプリ(のVMサンドボックス)が動くAndroid OS(というかランタイム環境)、(3)Android IDEが動くLinuxOS(たぶんDebian)の3つのコンテナが動くようになるのではないか。などと妄想してみる。

 

ところで、nethackゲヘナを整地しているのだが、せっかく最短ルートを整備したのに、穴を掘るモンスター、マジでむかつく。追いかけて滅してやろうと思ったら、また更に降りられる。。。

 

どこでもnethack3.6

どこでもnethack3.6をできる環境を作る方法:

 

・小型のchromebookを買う。できればIntelでなくARMチップのを。(軽くてバッテリが保つ)

・設定で「Linux」を有効化する。

・「ターミナル」というアプリを起動する。

・「sudo apt-get install nethack

・「nethack

 

英語版nethack3.6.0が起動します。(2019/6)

f:id:yasuoyamasaki:20190614161016j:plain

nethack3.6

ArchLinuxを入れたら英語版nethack3.6.2も遊べます。

 

私はAsus Chrombebook C101PAをヨドバシで買いました。2019/5 ポイント還元で約3.7万円)。重さ900グラムはMacbook12インチ並の軽さ。10インチと小型の割にはキーボードが打ちやすい。蓋を開けば即起動(復帰)。

 

ただし、ChromebookのOSが更新されるとLinux環境もなくなる場合があるので、クラウドセーブするとよいです。

 

・「ファイル」というアプリを開く

Google DriveLinuxで共有できるようにする。(右クリックを使う)

・「ターミナル(linux)」にて「cp /var/games/nethack/save/* /mnt/chromeos/GoogleDrive/MyDrive/」と打つ。

 

f:id:yasuoyamasaki:20190614162103j:plain

C101PA & Nintendo Switch

持ち歩くには便利な小ささで、キーボードがまともに使える。バッテリーも保つ。

 

しかし!最下層にたどり着き、Amulet of life savingが6個溜まったけど、Spellbook of polymorphが手に入らない。。。願うか。