二世帯住宅改造

現状確認

前回の枕に書いた、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を無効化する が解決策。


This year's Index

Home