二世帯住宅改造
現状確認
前回の枕に書いた、Linux + FreeBSDのdual bootマシン。両者間でファイルのやり取りをしようとすると、お向かいのWindowsマシンを中継しないと出来無い。具体的には、WSLにあるscpを使っての転送。はなはだ面倒。何とかしたい。
と言う事で、表題をたよりにいらした、工務店の方には、お引取り願おう。
まずは現状確認。
FreeBSD家の言い分
[sakae@fb ~]$ gpart show /dev/ada0 => 40 488397088 ada0 GPT (233G) 40 1024 1 freebsd-boot (512K) 1064 100662272 2 freebsd-ufs (48G) 100663336 8388608 3 freebsd-swap (4.0G) 109051944 2008 - free - (1.0M) 109053952 2048 4 bios-boot (1.0M) 109056000 377341952 5 linux-data (180G) 486397952 1998848 6 linux-swap (976M) 488396800 328 - free - (164K)
御覧のように、HDDの敷地一杯に世帯が展開されている。
Debian家の言い分
sakae@deb:~$ sudo parted sda -l : Number Start End Size File system Name Flags 1 20.5kB 545kB 524kB 2 545kB 51.5GB 51.5GB freebsd-ufs 3 51.5GB 55.8GB 4295MB 4 55.8GB 55.8GB 1049kB bios_grub 5 55.8GB 249GB 193GB ext4 6 249GB 250GB 1023MB linux-swap(v1) swap
sambaはどうだ?
どうせWindowsを経由させるなら、Windowsで動いているsambaを使ってしまうという方法があるな。いわゆる共有ね。
これなら、両OSに何等変更を加える事なく、実現出来る。
でもね、これだとファイル交換の際にWindows機が動いている必要がある。ちょっと、なんだかかなあ感がただようぞ。二世帯間の問題は、両者間だけで解決したい。第三者が介入すると、ややこしくなるのは、世の常だ。
FreeBSD側でext4fsをマウントする案
ext2fs(5)を見ると
DESCRIPTION The ext2fs driver will permit the FreeBSD kernel to access ext2 file systems and its derivatives. It currently implements most of the features required by ext3 and ext4 file systems. Support for Extended Attributes in ext4 is experimental. Journalling and encryption are currently not supported.
こんな事が書かれている。実験ですってのが、少々気になる所だ。使うなら、
[sakae@fb ~]$ cat /boot/loader.conf ext2fs_load="YES"
して、準備せいって事だ。
root@fb:~ # mount -t ext2fs /dev/ada0p5 /mnt
マウントしておいて
[sakae@fb ~]$ cd /mnt [sakae@fb /mnt]$ ls bin@ initrd.img@ lost+found/ root/ tmp/ boot/ initrd.img.old@ media/ run/ usr/ dev/ lib@ mnt/ sbin@ var/ etc/ lib64@ opt/ srv/ vmlinuz@ home/ libx32@ proc/ sys/ vmlinuz.old@ [sakae@fb /mnt]$ ls -l /mnt/home total 4 drwxr-xr-x 22 1000 1000 4096 Sep 30 16:12 sakae/
リナ側を探索してみた。
[sakae@fb /mnt]$ df -h Filesystem Size Used Avail Capacity Mounted on /dev/ada0p2 46G 7.9G 35G 18% / devfs 1.0K 1.0K 0B 100% /dev tmpfs 1.0G 8.0K 1.0G 0% /tmp /dev/ada0p5 177G 38G 130G 23% /mnt
そして、現在のDISK使用状況。
他に手は無いの? コンペの内容が公開されてた。例としてこんなのが。
$ sudo pkg install fusefs-lkl $ sudo kldload fuse $ sudo lklfuse -o type=xfs /dev/ada1p2 /mnt
これは、お初です。ちょいと調べてみたよ。
[sakae@fb /usr/ports/sysutils/fusefs-lkl]$ cat pkg-descr Linux as a library; and BTRFS, Ext4, and XFS for FUSE. WWW: https://github.com/lkl/linux/
なに、リナのカーネル機能(の一部を)くくり出してライブラリィーにしちゃいました。それとfusefs(カーネルが介在しないファイルオペレーション)を使って、ext4fsを扱います、って事だな。技術的には面白そうだけど、野生の勘が止めとけって言っている。
ext2fsを使うのが現実的だな。
で、問題はもう一つある。ユーザーのidとグループ番号問題。
sakae@deb:~$ id uid=1000(sakae) gid=1000(sakae) groups=1000(sakae),4(adm),24(cdrom),25(floppy),29(audio),30(dip),37(operator),44(video),46(plugdev),50(staff),109(netdev),112(bluetooth)
リナはuidが1000になってる。
[sakae@fb /usr/ports]$ id uid=1001(sakae) gid=0(wheel) groups=0(wheel),5(operator),44(video)
一方、FreeBSDでは、惜しい事に1つづれている。番号違いは別ユーザーと認識されて種々の問題がでる。FreeBSDをリナに合わせると言う、屈辱的な事をせにゃならん。どうしてもやるなら、vipwでパスワードファイルの編集だな。それから、おもむろにchown -R とか、すればいいのかな。
共通エリアを敷地内に確保する案(本命)
OpenBSD-based Live System - 河豚板 さんのように、両OSから共通にアクセス出来るエリアを作ってしまう方法。msdosfsなら、リナだろうとFreeBSDだろうと、満足にアクセス出来るでしょう。
で、問題は、共通エリアの場所を捻出する事にかかってくる。目を付けたのは、ほぼ耕作放棄地になってるswapエリアだ。メモリーを4G載せてるマシンなんで、よほど手荒な事をしない限り、これが使われる事は無いだろう。
リナ用とFreeBSD用と2つも独立に確保されてるけど、心情的には、DISKの最後の部分にあるswapをmsdosfsに転用したい。
これなら、両者傷み分けで、安泰になろうってもんだ。
add swap
完全にswapエリアを削除してもいいんだけど、もしもの為に、swap fileを追加しておくか。確か、そんな事が出来たはず。
How to Add Swap Space on Debian 10 Linux
現状どうなってるか、確認。
下記は、勝手知ったるtopコマンドの冒頭部分
top - 14:32:18 up 58 min, 5 users, load average: 0.06, 0.10, 0.31 Tasks: 102 total, 1 running, 101 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st MiB Mem : 3804.7 total, 2530.4 free, 104.4 used, 1169.9 buff/cache MiB Swap: 976.0 total, 976.0 free, 0.0 used. 3270.7 avail Mem
こちらは、示されていた専用コマンド。なんかリナは専用コマンドが好きなんだよな。
sakae@deb:~$ sudo swapon --show NAME TYPE SIZE USED PRIO /dev/sda6 partition 976M 0B -2
追加工事を実施する。
sakae@deb:~$ sudo fallocate -l 1G /swapfile sakae@deb:~$ sudo chmod 600 /swapfile sakae@deb:~$ sudo mkswap /swapfile Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes) no label, UUID=d9d6f2d8-ae26-435a-b3ba-f1b5f6a80e5c sakae@deb:~$ sudo swapon /swapfile
そして、それを登録する。登録先は、勿論 /etc/fstab 内容は下記
/swapfile swap swap defaults 0 0
登録されたな。後は、/dev/sda6のラインをfstab上でコメントにしとけばいいな。
sakae@deb:~$ sudo swapon --show NAME TYPE SIZE USED PRIO /dev/sda6 partition 976M 0B -2 /swapfile file 1024M 0B -3 sakae@deb:~$ sudo free -h total used free shared buff/cache available Mem: 3.7Gi 104Mi 2.5Gi 59Mi 1.1Gi 3.2Gi Swap: 2.0Gi 0B 2.0Gi
再起動したら、sda6が見えなくなった。これでDISKの最後のエリアは煮るなり焼なり勝手にどうぞ状態だな。
sakae@deb:~$ sudo swapon --show NAME TYPE SIZE USED PRIO /swapfile file 1024M 0B -2
parted
ググると色々出てくるけど、 Parted at archLinux が一番明瞭。ああこれはDISKの区画を管理するコマンドね。
sakae@deb:~$ sudo parted /dev/sda (parted) rm 6 (parted) mkpart Partition name? []? File system type? [ext2]? fat32 Start? 249GB End? 250GB (parted) p Model: ATA HITACHI HTS54502 (scsi) Disk /dev/sda: 250GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 20.5kB 545kB 524kB 2 545kB 51.5GB 51.5GB freebsd-ufs 3 51.5GB 55.8GB 4295MB 4 55.8GB 55.8GB 1049kB bios_grub 5 55.8GB 249GB 193GB ext4 6 249GB 250GB 1023MB fat32 (parted) q Information: You may need to update /etc/fstab.
6番目の区画であるswapを削除。そして同エリアをmsdos用エリアとして再登録した。
dosfstoolsをaptから入れる。一生に一度しか使わないであろうdos用のフォーマッターだ。
sakae@deb:~$ sudo /usr/sbin/mkfs.msdos /dev/sda6 mkfs.fat 4.2 (2021-01-31)
使ってみる
準備が出来たので、まずはマウント・ポイントを mkdir /dos; chmod 777 /dos して準備。おもむろに、マウント。
sakae@deb:~$ sudo mount -t msdos /dev/sda6 /dos
一般ユーザーでcpしようとしたら怒られた。しょうがないので、sudo cp Gauch-gl-0.6.tgz /dosで、書込み。
続いてFreeBSDに舞台を移す。
[sakae@fb ~]$ gpart show /dev/ada0 => 40 488397095 ada0 GPT (233G) 40 1024 1 freebsd-boot (512K) 1064 100662272 2 freebsd-ufs (48G) 100663336 8388608 3 freebsd-swap (4.0G) 109051944 2008 - free - (1.0M) 109053952 2048 4 bios-boot (1.0M) 109056000 377341952 5 linux-data (180G) 486397952 1998848 6 ms-basic-data (976M) 488396800 335 - free - (168K) root@fb:~ # mount_msdosfs /dev/ada0p6 /dos root@fb:~ # ls -l /dos total 1340 -rwxrwxrwx 1 root wheel 1369790 Oct 1 16:52 GAUCHE-G.6
ちゃんとパーテションテーブルにも反映されてた。マウントポイントを作ってから、マウント。 Debianで書き込んだのがちゃんと見えるか確認。短かい名前になっちゃってる。これじゃ使いものにならんぞ。
ファイルシステムをvfatで用意すればいいのかな? まて、脳内CPUがまたまた停止してるな。DOS系のファイルシステムにする必然性は有るのか? 二世帯だけで通用すれば、それで十分だろう。素直にext2fsぐらいにしとくのが無難と思われる。
再度の変更
今度は手抜きして、駄目元でいきなり、ext2でフォーマットと言う無茶をしてみる。
sakae@deb:~$ sudo mkfs -t ext2 /dev/sda6 mke2fs 1.46.2 (28-Feb-2021) /dev/sda6 contains a vfat file system Proceed anyway? (y,N) y Creating filesystem with 249856 4k blocks and 62464 inodes Filesystem UUID: 039c539b-50c6-472a-ae58-6c545571ceaa Superblock backups stored on blocks: 32768, 98304, 163840, 229376 Allocating group tables: done Writing inode tables: done Writing superblocks and filesystem accounting information: done
この区画はvfatとして地均ししてあるけど、作業進めていいのって確認が入った。ええ、指示したようにやっとくれ。
sakae@deb:~$ sudo mkdir /meet sakae@deb:~$ sudo chmod 777 /meet sakae@deb:~$ sudo mount /dev/sda6 /meet sakae@deb:~$ cp Downloads/Gauche-gl-0.6.tgz /meet cp: cannot create regular file '/meet/Gauche-gl-0.6.tgz': Permission denied sakae@deb:~$ sudo cp Downloads/Gauche-gl-0.6.tgz /meet sakae@deb:~$ ls -l /meet total 1360 -rw-r--r-- 1 root root 1369790 Oct 2 05:50 Gauche-gl-0.6.tgz drwx------ 2 root root 16384 Oct 2 05:43 lost+found/
FreeBSDとリナが出会う場所って事で、meetて名前にした。別案として、港を意味するportとかが浮んだけど、FreeBSDにはportsって名前があるからクレームがくるだろうってんで引っ込めておいたのさ。
で肝心のファイル登録時に文句を言われるのは、オプションが足りないから? 後で調査だな。本筋を追うのが先だ。再びFreeBSDに行く。
root@fb:/ # mkdir /meet root@fb:/ # chmod 777 /meet root@fb:/ # mount -t ext2fs -o rw /dev/ada0p6 /meet root@fb:/ # ls -ld /meet drwxr-xr-x 3 root wheel 4096 Oct 2 05:50 /meet root@fb:/ # umount /meet root@fb:/ # ls -ld /meet drwxrwxrwx 2 root wheel 512 Oct 2 14:20 /meet
マウントポイントの設定を誰でもってしておいても、マウントするとパーミションが変わるのか。マウントを解除すると、元に戻る。リナで見た文句もこれが原因じゃなかろうか。
そう言えば、昔OpenBSDでDISK増設した時に悩んだ記憶があるな。どうやって解決したかOpenBSDを視察したよ。
vbox$ ls -l EXTd/ total 12 drwxr-xr-x 11 root wheel 512 Oct 5 2020 local/ drwxr-xr-x 6 sakae wheel 512 Oct 2 14:08 opt/ drwxr-xr-x 17 root wheel 512 Aug 27 06:14 src/ vbox$ ls -ld EXTd/ drwxr-xr-x 5 root wheel 512 Aug 27 06:13 EXTd//
EXTdってマウントポイントがあって、その直下にそれぞれのdirを配置してる。そのうちのoptが自分の物になってて、そこは自由に読み書き出来る。
今回もそんな構成にしないとだめかな。
root@fb:/ # mkdir /FBDEB root@fb:/ # vi /etc/fstab : /dev/ada0p6 /FBDEB ext2fs rw 0 0 root@fb:/ # mount -a root@fb:/ # df : /dev/ada0p6 982504 1368 931168 0% /FBDEB
新たにマウントポイントを作成。それに合わせてfstabを編集。ちゃんとmount出来るか確認。
[sakae@fb ~]$ ls -l /FBDEB total 1360 -rw-r--r-- 1 root wheel 1369790 Oct 2 05:50 Gauche-gl-0.6.tgz drwx------ 2 root wheel 16384 Oct 2 05:43 lost+found/
古い情報が見えた。lost+found/ なんて懐しいな。これがext2fsの仕様なのか。
次に、もう一度debianに行き、同様の設定を行う。そして、/FBDEB/meet を作成。それを自分の物としてパーミション設定。便利さの為、下記のリンクを作る。そうしておくと、cp xx.tgz /meetって具合に、前と同じ使い心地が実現出来る(FreeBSD側では、リンク作業だけ実施)。
sakae@deb:/$ sudo ln -s /FBDEB/meet /meet
仕上げ
debianには犠牲を強いたので、FreeBSDも譲歩する事にした。uidを変更して利便性を高めるのだ。
vipwしてユーザーの登録簿からsakaeのuidを変更。続いて、既にあるファイル類のidを変更する。やり方は、cd /home; chown -R sakae sakae もし、home以外に子が居たら、忘れずに認知しておけ。そうしないと、それらのファイルは、みなし子になっちゃうぞ。
[sakae@fb ~]$ id uid=1000(sakae) gid=0(wheel) groups=0(wheel),5(operator),44(video)
idをdebianと同一になった(こういうクリチカルな操作をしたら、安全のため再起動が原則、問題があっても、鉄は熱いうちに撃ての原則を適用し易い)。それで、共通エリアに何の不自由もなく書き込める。
[sakae@fb ~]$ ls -l /meet/ total 1352 -rw-r--r-- 1 sakae 1000 1369790 Oct 2 15:37 Gauche-gl-0.6.tgz -rw-r--r-- 1 sakae wheel 1183 Oct 2 16:07 gui.c -rw-r--r-- 1 sakae 1000 3571 Oct 2 15:43 mine.tgz
gidが1000になってるのは、debian側が書き込んだと一目で解る、副作用が出て来た。これは、それなりに便利だ。
sakae@deb:~$ ls -l /meet/ total 1352 -rw-r--r-- 1 sakae sakae 1369790 Oct 2 15:37 Gauche-gl-0.6.tgz -rw-r--r-- 1 sakae root 1183 Oct 2 16:07 gui.c -rw-r--r-- 1 sakae sakae 3571 Oct 2 15:43 mine.tgz
こちらはdebian側での見えかた。
まとめ
HDDの容量一杯まで使った、Dual boot なマシンが有った。両OS間を結ぶ通路が欲しい。そこで、swapエリアを潰して、連絡用のファイルシステムを作った。それを、各OSがマウントすれば、ファイルの受渡し場所として活用出来る。
今回はdebianのswapを潰したけど、同じ要領でFreeBSD側のswapも召し上げれば、更に融通が効いて便利だろう。
こぼれ話として、、管理者を堪能
久し振りに、unixの管理者を堪能した。上では書かなかったけど、FreeBSDのfstabを変更して、再起動したら、shellに落ちてしまったんだ。こんな事超久し振り。
ext2fsのfsckなんて出来ません。そんな外来種の面倒をそこまで見られませんって内容。
そう、何を隠そう、fstabaの最終項に2を指定してたんだ。これはfsckを2番目に実行してねって指示になる。
変更する部分はもう分っているのに、ファイルシステムがread-onlyでマウントされてるんで、手も足も出ない。
mount -o rw /dev/ada0p2 /
たまには、こういう問題をつき付けられるものいいもんだ。
そして、もう一つ問題がある事に気付いた。 debianの方で起動時間が随分かかるようになったんだ。起動画面をじっと見ていると
Gave up waiting for suspend/resume device
こんなのが出ている。特にログには記録されていない。
Debianのswap消しちゃったら起きるコト オイラーと一緒だね。
suspendする時はメモリー内容をswapに保存する。起動時にはそれを復帰させる。そうすれば、スマホみたいな感覚ですぐ使える。そこまではいい。
でも、オイラーはそんな指示してない。それなのに勝手にswap deviceが無いとほざいてる。 呆れ返って、何も言えないぞ。いや、言っちゃうぞ。くそったれ、あほんだら!!
Debian 10 (Buster) でswapを無効化する が解決策。