ラベル ZFS の投稿を表示しています。 すべての投稿を表示
ラベル ZFS の投稿を表示しています。 すべての投稿を表示

2021年7月2日金曜日

BeelinkS1でmicroSDカードを(6)

 反省である。

 最大の原因は作成したインストールメディアがFreeBSD13だったことだ。移行予定のHDのFreeBSDは12だったのである。安易にだいじょうぶだろう、と考えたのがまちがいだった。インストールメディアから作成したmicroSDのFreeBSDにHDの中身をいれると、bootしなくなるのである。
 ZFSのバージョンとか、色々、あるらしい。

 などと いっているけれど、これは単純にオペミスだったかも。
 というのも

gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 2 da0

 みたいな感じでブートコードをupdateしたのだけれど、これってよくよく考えたらMBR用じゃね?
 実際のbootにはUEFIを使っているから、 それ用のブートコードをupdateをしなければ、いけなかったはず。今さら試してみる気にはなれないけれど。FreeBSD13にupdateするとき、否が応にも試すことになるだろうけど。

2021年6月29日火曜日

BeelinkS1でmicroSDカードを(5)

 結局、microSDカードのスロットが空いてしまっている。
 予定ではそこからbootして、うひょひょひょひょっ、と喜色満面の予定だったのだが。
 ただこのスロットは埋めておきたい。
 いつもの貧乏性からだけでなく、何もいれていないと、FreeBSDの起動に時間がかかるからだ。なぜだか、知らないが——WindowsもUbuntuもだいじょうぶだったのに、bootのときに、このスロットを確認しにいくのである。何度もTimeoutしてもしつこく。
 なのでとりあえず、microSDカードをいれておきたい。
 ところが壊れたmicroSDカードも手元にないし、使えるものをただ、いれておくというのも忍びない。

 そうだ。
 mirrorにしよう。
 microSDカードを使おうと試行錯誤していたとき、USBメモリとmicroSDカードをstripeにしたことはあるのだけど、これはうまくいかなかった。bootの途中で、microSDカードを認識できないので、stripeに失敗するからだと思う。mirrorならうまくいくんじゃないか。

 そこでmirror用にmicroSDカードを購入した。
 boot用のmicroSDカードと同じ128Gのものである。mirrorは同じサイズにしなければ、いけないからだ。なんか、貧乏性でいろいろ、工夫しているのに、金が出ていくな。

 届いたmicroSDカードにFreeBSD12をinstall。
 インストールディスクからbootしたあと、zroot2をimportして

$ sudo zpool attach zroot2 da0p4 mmcsd0p4

 しばらくしてエラーがでた。
 smallなんとかかんとか。
 あれ?

$ gpart show da0
=>       40  250560432  da0  GPT  (119G)
         40     409600    1  efi  (200M)
     409640       1024    2  freebsd-boot  (512K)
     410664        984       - free -  (492K)
     411648    4194304    3  freebsd-swap  (2.0G)
    4605952  245952512    4  freebsd-zfs  (117G)
  250558464       2008       - free -  (1.0M)

$ gpart show mmcsd0
=>       40  249737136  mmcsd0  GPT  (119G)
         40     409600       1  efi  (200M)
     409640       1024       2  freebsd-boot  (512K)
     410664        984          - free -  (492K)
     411648    4194304       3  freebsd-swap  (2.0G)
    4605952  245129216       4  freebsd-zfs  (117G)
  249735168       2008          - free -  (1.0M)

 同じ128GのmicroSDカードなのにサイズがちがうじゃないか。
 しかも新しく購入した方が小さい。逆ならリサイズしてなんとか、なったのに。mmcsd0p4をいくら拡張してもda0p4のサイズにならない——頭を抱えてしまった。da0の方が破損したときに、mmcsd0のmicroSDカードからbootできるようにしたいので同じような構成したのだが。
 あきらめることも含めて検討した結果、swap領域を小さくしてmmcsd0p4をサイズ拡張した。

$ sudo gpart delete -i 4 mmcsd0
mmcsd0p4 deleted

$ sudo gpart delete -i 3 mmcsd0
mmcsd0p3 deleted

$ gpart show mmcsd0
=>       40  249737136  mmcsd0  GPT  (119G)
         40     409600       1  efi  (200M)
     409640       1024       2  freebsd-boot  (512K)
     410664  249326512          - free -  (119G)

$ sudo gpart add -a 4k -t freebsd-swap -s 1G mmcsd0
mmcsd0p3 added, but partition is not aligned on 4194304 bytes
$ gpart show mmcsd0
=>       40  249737136  mmcsd0  GPT  (119G)
         40     409600       1  efi  (200M)
     409640       1024       2  freebsd-boot  (512K)
     410664    2097152       3  freebsd-swap  (1.0G)
    2507816  247229360          - free -  (118G)

$ sudo gpart add -a 4k -t freebsd-zfs -s 117G mmcsd0
mmcsd0p4 added, but partition is not aligned on 4194304 bytes
$ gpart show mmcsd0
=>       40  249737136  mmcsd0  GPT  (119G)
         40     409600       1  efi  (200M)
     409640       1024       2  freebsd-boot  (512K)
     410664    2097152       3  freebsd-swap  (1.0G)
    2507816  245366784       4  freebsd-zfs  (117G)
  247874600    1862576          - free -  (909M)

$ sudo gpart resize -s 245952512 -i 4 mmcsd0
mmcsd0p4 resized
$ gpart show mmcsd0
=>       40  249737136  mmcsd0  GPT  (119G)
         40     409600       1  efi  (200M)
     409640       1024       2  freebsd-boot  (512K)
     410664    2097152       3  freebsd-swap  (1.0G)
    2507816  245952512       4  freebsd-zfs  (117G)
  248460328    1276848          - free -  (623M)

$ gpart show da0
=>       40  250560432  da0  GPT  (119G)
         40     409600    1  efi  (200M)
     409640       1024    2  freebsd-boot  (512K)
     410664        984       - free -  (492K)
     411648    4194304    3  freebsd-swap  (2.0G)
    4605952  245952512    4  freebsd-zfs  (117G)
  250558464       2008       - free -  (1.0M)

 これでmmcsd0p4とda0p4は同じサイズになったのでattach。

$ sudo zpool attach zroot2 da0p4 mmcsd0p4

Make sure to wait until resilver is done before rebooting.

If you boot from pool  'zroot2', you may need to update
boot code on newly attached disk  'mmcsd0p4'.

Assuming you use GPT partitioning and  'da0' is your new boot disk
you may use the following command:

        gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0

$ 
$ zpool status zroot2
  pool: zroot2
 state: ONLINE
status: One or more devices is currently being resilvered.  The pool will
         continue to  function, possibly  in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver  in progress since Mon Jun 21 13:13:29 2021
        21.7G scanned at 208M/s, 1.19G issued at 11.4M/s, 21.7G total
        1.18G resilvered, 5.48% done, 0 days 00:30:45 to go
config:

        NAME          STATE     READ WRITE CKSUM
        zroot2        ONLINE       0     0     0
          mirror-0    ONLINE       0     0     0
            da0p4     ONLINE       0     0     0
            mmcsd0p4  ONLINE       0     0     0

errors: No known data errors

 同期してしまうのにしばらくかかった。

2021年6月25日金曜日

BeelinkS1でmicroSDカードを(4)

 かなりはまった。
 最大の原因は作成したインストールメディアがFreeBSD13だったことだ。移行予定のHDのFreeBSDは12だったのである。安易にだいじょうぶだろう、と考えたのがまちがいだった。インストールメディアから作成したmicroSDのFreeBSDにHDの中身をいれると、bootしなくなるのである。
 ZFSのバージョンとか、色々、あるらしい 1。
 お得意のddディスク丸ごとコピーもだめで、うまくいくこともあるのだが、HDを作成したときにすでにおかしくなっているところがあることに気づき、FreeBSD12のインストールディスクをつくりなおすことにした。

 以下の手順は記憶にたよって書いているのでまちがいがあるかもしれない。

・インストールメディアからmicroSDにFreeBSDをinstall。このとき、pool名をでデフォルトではなく、zroot2に。

 HDの中のFreeBSDのpool名がzrootになっているからである。

・インストールメディアからインストールメニューを立ち上げ、shellへ。

・zroot、zroot2をimport

zpool import -fN zroot

zpool import -fN zroot2

・zrootにsnapshotを作成。

zfs snapshot -r zroot@snap999

・HDの中身をZFSのsend/resvで、microSDへ流しこむ。

zfs send -pR zroot@snap999 | zfs recv -uvdF zroot2

>> 参考先

・microSDから起動を確認。

 ただし、/etc/fstabの中のswapのデバイス定義がHDになっているのでswapなしの状態になっている。

Footnotes:

1

12と13で作成したbootディスクはBIOS(EFI?)から見え方がちがっていたので、ずいぶんかわっていたのかもしれない。

2021年6月18日金曜日

zpool import

 すっかり忘れていた。
 BeelinkS1でmicroSDカードを使おうと、HDからデータを移そうとして。
 ZFSのことである。
 コマンドを忘れたとか、というレベルではなく、概念そのものをすっかり失念していて、おかげで 以前、いじったときの記事を読んでも意味がさっぱりわからない。自分で書いたのに。
 そもそもzpool importをデータのimportだと勘違いしていた。

zpool export XXXXX | zpool import YYYYY

 とか、やって動かないなぁ、と。
 アホだ。
 zpool importはデータのimportではなく、システムに指定したpoolを認識させるためのものだった。それがわかってちょこちょこやっていたのだけど。
 単純にzpool importすると、mountされてしまう。
 どういうタイミングだったのか、よくわからないのだが、何度か、ルートをすっ飛ばして/binが消えてしまって身動きできなくなってしまった。
 zpool importしないと、poolにたいする操作ができないし。
 mountしないでimportする方法はないものか。グーグル先生にたずねてもわからず、ないものか、とあきらめかけたところ、真面目にmanマニュアルを読んでいったら見つけた。

zpool import -N XXXXXX

 「-N」ですか。
 これですこしは自由になれたかな。

2019年12月30日月曜日

40G=>128Gへ

 Beelink S1のディスクは いろいろあってハードディスクにしていたのだけれど、容量が40Gしかない。やはり128Gある、SSDに交換しよう。どうすれば、いいかな……。
 FreeBSDのインストールUSBからBeelink S1を立ち上げて、ddコマンドで40Gの中身を丸ごとコピーすることにした。内蔵ディスクの40Gから 「ORICO USB3.0 HDDスタンド」へ接続した128Gへ。

dd  if=/dev/ada0  of=/dev/da0  bs=1m

 内蔵ディスクをSSDに取り替えてboot。
 立ち上がった。ZFSは勝手に空きを使ってくれるんだよね……と思っていたらあれ?

$ df -h
df -h
Filesystem            Size    Used   Avail Capacity  Mounted on
zroot/ROOT/default     26G    7.0G     19G    27%    /
devfs                 1.0K    1.0K      0B   100%    /dev
zroot/var/mail         19G    200K     19G     0%    /var/mail
zroot/var/audit        19G     88K     19G     0%    /var/audit
zroot/usr/ports        20G    696M     19G     3%    /usr/ports
zroot/usr/home         20G    318M     19G     2%    /usr/home
zroot/usr/src          19G     88K     19G     0%    /usr/src
zroot/tmp              19G    6.4M     19G     0%    /tmp
zroot                  19G     88K     19G     0%    /zroot
zroot/var/crash        20G    614M     19G     3%    /var/crash
zroot/var/log          19G    700K     19G     0%    /var/log
zroot/var/tmp          19G     88K     19G     0%    /var/tmp
$

 40Gしか認識してねえ。

zpool online -e zroot /dev/ada0p4

 でもだめで、

$ zfs list
zfs list
NAME                 USED  AVAIL  REFER  MOUNTPOINT
zroot               14.7G  19.2G    88K  /zroot
zroot/ROOT          11.5G  19.2G    88K  none
zroot/ROOT/default  11.5G  19.2G  6.95G  /
zroot/tmp           10.3M  19.2G  6.39M  /tmp
zroot/usr           2.47G  19.2G    88K  /usr
zroot/usr/home      1.78G  19.2G   318M  /usr/home
zroot/usr/ports      706M  19.2G   696M  /usr/ports
zroot/usr/src        144K  19.2G    88K  /usr/src
zroot/var            624M  19.2G    88K  /var
zroot/var/audit      144K  19.2G    88K  /var/audit
zroot/var/crash      615M  19.2G   614M  /var/crash
zroot/var/log       6.36M  19.2G   700K  /var/log
zroot/var/mail      2.18M  19.2G   200K  /var/mail
zroot/var/tmp        496K  19.2G    88K  /var/tmp
$

 認識してくれない。うーむ。

$ gpart show ada0
gpart show ada0
=>      40  78140080  ada0  GPT  (119G)
        40    409600     1  efi  (200M)
    409640      1024     2  freebsd-boot  (512K)
    410664       984        - free -  (492K)
    411648   4194304     3  freebsd-swap  (2.0G)
   4605952  73533440     4  freebsd-zfs  (35G)
  78139392       728        - free -  (364K)

 gpartで見てみると、なるほど。ada0は119Gあるのに、zfsの領域を35Gしか、認識していない。これか。調べてみると、gpartにはresizeというサブコマンドがある。こうか?

$ sudo gpart resize -i 4 ada0
sudo gpart resize -i 4 ada0
ada0p4 resized
$ gpart show ada0
gpart show ada0
=>       40  250069600  ada0  GPT  (119G)
         40     409600     1  efi  (200M)
     409640       1024     2  freebsd-boot  (512K)
     410664        984        - free -  (492K)
     411648    4194304     3  freebsd-swap  (2.0G)
    4605952  245463688     4  freebsd-zfs  (117G)

 うまくいった。
 けれど、これだけではまだ、足りなくてZFSの方で認識してくれてなかった。なのであらためて。

zpool online -e zroot /dev/ada0p4
$ zfs list
zfs list
NAME                 USED  AVAIL  REFER  MOUNTPOINT
zroot               14.6G  98.7G    88K  /zroot
zroot/ROOT          11.5G  98.7G    88K  none
zroot/ROOT/default  11.5G  98.7G  6.96G  /
zroot/tmp           10.4M  98.7G  6.39M  /tmp
zroot/usr           2.46G  98.7G    88K  /usr
zroot/usr/home      1.77G  98.7G   315M  /usr/home
zroot/usr/ports      706M  98.7G   696M  /usr/ports
zroot/usr/src        144K  98.7G    88K  /usr/src
zroot/var            624M  98.7G    88K  /var
zroot/var/audit      144K  98.7G    88K  /var/audit
zroot/var/crash      615M  98.7G   614M  /var/crash
zroot/var/log       6.39M  98.7G   720K  /var/log
zroot/var/mail      2.09M  98.7G   200K  /var/mail
zroot/var/tmp        504K  98.7G    88K  /var/tmp
$

 いきましたね。よかったよかった 1。

Footnotes:

1

実はいつか、わからないけどbootコードを壊してしまっていたのだった。

2019年6月25日火曜日

ZFS

 ZFSはたしか、圧縮して実際に使用するディスク量を減らすことができたはず。
 その設定をしようか、と思って今の状態を調べてみると。

zfs get compression

 おや、どのデータセットも圧縮する設定になっている。
 どのくらい圧縮されているんだろう?

$ zfs get used,logicalused zroot
zfs get used,logicalused zroot
NAME   PROPERTY     VALUE  SOURCE
zroot  used         7.05G  -
zroot  logicalused  13.0G  -
$

 半分ぐらいになっていた。
 そうか。それでリストアを試してみたとき、10Gを超えていたのか。

 というか、これだとディスク容量を節約するために不要なファイルを圧縮しても意味がないんだな。
 ふむ。

2019年5月20日月曜日

フルバックアップからのリストア

 フルバックアップをとったのはいいけれど、これってどうやったらリストアできるんだろう?
 単純にzrootに「zfs receive」で流しこめば、いいか、と思ったけれど、やってみたら「/var/log」がビジーだと怒られた。よくよく考えたらzrootの中にバックアップファイルを置いているんだからまずいよな。
 いくつかのサイトを参照。
 こことか、ここ。
 試行錯誤してすこしわかった。
 まず、LiveCD1から作業をする。
 バックアップファイルは別のUSBデバイスなりに、ZFSでいれておく(別にマウントできるならUFSでもいいような気はする)

zpool import -f POOL名

 で、バックアップファイルの入ったpoolを認識させて

zfs set mountpoint=PATH名 POOL名
zfs mount zbackup

 マウント。

zfs receive -vdF zroot < バックアップファイル

 で流しこむ。
 とりあえず、zrootを認識させるためにimportする必要があった。
 強引につくりなおしてもいけるような気がする。

zpool create -f zroot デバイス名

 以上、ざっくり。

Footnotes:

1

FreeBSD12のインストールメディアから可能。

2019年5月19日日曜日

熱暴走その後のその後

 三日間、CPUをぶん回したらpostgresがおかしくなった。
 また、アクセスできないデータブロックが発生している。これはUbuntuのときも発生したことで、最後にはSSDがreadonlyになってしまった。前回もやはり三日目ぐらいだった。
 だめか。
 今回はすこしちゃんと見てみる。

zpool status -v

 やはりerrorがでていた。しかもバックアップからデータをもどしてね、みたいなメッセージつき。
 バックアップなんてとってねーし。
 postgresのデータブロックだけではなく、ほかにもいろんなファイルが壊れている模様。
 ——これはだめだ。
 せめてバックアップをとっていれば。すっかり頭になかった。

 やはりSSDでの連続運用は無理があるのかも——というわけであらためてハードディスクを持ち出してきてFreeBSD12をインストールしなおす。
 今回はある程度、設定したところでバックアップをとることにした。
 ZFSのことはよくわかっていないので泥縄で学ぶ。「ZFS - スナップショットいつやるか?今でしょ!」とか、これとか、これ。フルバックアップをとったあと、「zfstools」をインストールして1時間ごとにsnapshotをとるようにする1。

 しかし、これでもなお、三日でおかしくなるようだったらどうしよう。
 ま、今回はバックアップがあるわけだけど。

Footnotes:

1

ちなみにpkgだとzfstoolsは「/usr/local/sbin」の下にインストールされていた。

2017年3月30日木曜日

FreeBSDでストライピング

 ThinkPadにお立ち台で外付けしているSSDが満杯になってしまった。128Gである。別にマイニングをしているわけではないのだが、Bitcoinを動かしていてそのデータが100Gを超えてしまったのだ。つい数年前は50Gで充分だったのに。あっという間にデータが増えた——世の中でけっこうBitcoinが使われているのだろう。
 所有しているBitcoinはほんとうに微々たるものなので、ま、いいか、と思っていた——そのためにハードディスクを買うのも何かちがうな、と。それで半年ほど放っておいたのだが、時々、思い出してはZFSが使えればなぁ、とは思っていた。
 というのもZFSでストライピングすれば、あまっているハードディスクを接続して(二台のハードディスクを)一台として使える。そうすれば、300Gほどのハードディスクになる。しかしThinkPadは32bitマシンで、ZFSを使うのはきつい。あきらめていた。すっかり忘れていたのだ。ZFSにしなくてもFreeBSDでハードディスクをストライピングできることを。
 それを唐突に思い出した。

 ——あっ。

 「倉庫番」みたいにハードディスクのデータをあちらこちらへ移動させて最終的に二台の160Gのハードディスクを用意した。その過程でBitcoinのデータは削除することになってしまったけれど。本末転倒である。しかし、Bitcoinのデータはネットからもう一度、落としなおすことができる。
 この二台をお立ち台でThinkPadにつないで300Gのハードディスクにしてしまおうというわけだ。けっこうはまるかな、と思っていたら「https://www.freebsd.org/doc/handbook/geom-striping.html」の通りにやったらあっさりできてしまった。つまらん。

$ df -h
Filesystem          Size    Used   Avail Capacity  Mounted on
/dev/ada0p2         115G     81G     25G    77%    /
devfs               1.0K    1.0K      0B   100%    /dev
procfs              4.0K    4.0K      0B   100%    /proc
/dev/stripe/st0a    289G    8.0K    266G     0%    /mnt
$

 300Gというのはのぞみすぎだったけれど。

2015年5月14日木曜日

FreeBSD 64bitをインストール

 ThinkPadのFreeBSDをMacBook AirのVirtualBoxで動くようにしたら、ネットワークドライブ経由ではなく、ローカル環境に動作するものが欲しくなってしまった。ああ、しかもだ。FreeBSDは32bitバージョン(i386)ではなく、今や主流の64bitを。
 でも問題はローカルの容量が小さいことで——さてどうしたものか。
 そんなことを考えてFreeBSDハンドブックをながめていたら、bsdinstallでZFSをルートファイルシステムとしてインストールできるようになっているじゃないか! かなり簡単そうだ。
 たしか、ZFSはファイルシステムの中身を圧縮して使うことができたはず。それならローカルの容量の少なさはクリアできるんじゃないか。ZFSならVirtalBoxの仮想ハードディスクを可変に指定して、ほんとうに可変になって必要な分の容量しか、食わない、ともいう。たぶん(試していないけど)、UFSだとnewsfsが走った段階で、その分の容量を食ってしまうのではないだろうか。

 FreeBSD-10.1-RELEASE-amd64-bootonly.isoをサイトからもってきてFreeBSDハンドブックのとおりに、インストールした。ネットワークごしにデータをもってくるところで時間はかかったけれど、ハードディスクのフォーマットなど、あれ、と思うほど、あっさりと終ってしまった。ほんとうにフォーマットされてるの? だいたいZFSにフォーマットという概念はあるのか?
 スワップ領域は無駄だと思い、0を指定。
 必要になったらあとでswapfileを指定してやれば、いい。
 pkgでXorgとか、mateとか、Avahiとかを入れて終了。
 さて、ZFSの圧縮するか、と見てみると、すでに圧縮されていた。

 もうやることがない。懸念のディスク容量もほらこの通り。もちろんいろんなものを入れてないということもあるけれど。

 ネットワークはアダプタを二つ有効にして、ひとつはNATでグローバルへでていけるように、もうひとつはホストオンリーアダプターを使ってローカルのネット(MacBook Airと通信できるように)に接続できるようにした。DHCPが使えたので何の苦労もなし。しかもAvahiをrc.confで「avahi_daemon_enable="YES"」にしてあるので、pingもこのとおり。

 そこまでやってふと気づく。
 大概のことはMacBook Airでできてしまうのに。
 ——これで何をやれば、いいんだ?