<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="http://www.seirios.org/seirios/dokuwiki/lib/exe/css.php?s=feed" type="text/css"?>
<rss version="2.0">
    <channel xmlns:g="http://base.google.com/ns/1.0">
        <title>ほほほのほ - os:freebsd:hast</title>
        <description></description>
        <link>http://www.seirios.org/seirios/dokuwiki/</link>
        <lastBuildDate>Thu, 14 May 2026 13:29:10 +0000</lastBuildDate>
        <generator>FeedCreator 1.8</generator>
        <image>
            <url>http://www.seirios.org/seirios/dokuwiki/lib/exe/fetch.php?media=wiki:dokuwiki.svg</url>
            <title>ほほほのほ</title>
            <link>http://www.seirios.org/seirios/dokuwiki/</link>
        </image>
        <item>
            <title>FreeBSDでHAST/NFS Serverを立てる(Old)</title>
            <link>http://www.seirios.org/seirios/dokuwiki/doku.php?id=os:freebsd:hast:old</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;freebsdでhast_nfs_serverを立てる_old&quot;&gt;FreeBSDでHAST/NFS Serverを立てる(Old)&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Mail Serverなどに供給するFilesystemは安定性と冗長性が重要である。
しかし、一般にFilesystemの冗長化は非常に難しく、なかなかFreeに利用できる良い実装はない。
&lt;/p&gt;

&lt;p&gt;
Linuxを利用する場合は、DRBDやlsyncd/rsyncを用いた同期が可能である。
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; DRBD: Block DeviceとしてのHDDを同期する。今回のHASTと考え方はよく似ている。&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; lsyncd/rsync: Linux kernelのinotifyを利用した、ファイルの書き換え検出(lsyncd)と、検出されたファイルの同期(rsync)の組み合わせで実装する、ファイル単位の同期&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
しかし、FreeBSDを利用する場合、そのために用いる手法としては、実質HASTしかない。また、このHASTはNetBSDやOpenBSDには存在しない。
&lt;/p&gt;

&lt;p&gt;
今時、MailServerを構築する際には、Lock問題が発生しないように、Maildirを利用しHome Directoryにファイル単位で受信したメールを保存するのが一般的である。この時、SMTP Serverは冗長性を確保したいので、Home DirectoryはNFSでshareしたいという要望がある。
&lt;/p&gt;

&lt;p&gt;
以上より、FreeBSD 10.1を用いてHASTでHome Directoryを冗長化することにした。
&lt;/p&gt;

&lt;p&gt;
当初 NAS4Free で行こうと思ったのだが、以下の理由で FreeBSD + HAST を用いてNFS Server を組むことにした。
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; NFS「しか」使わないこと&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; CentOS7でNFSで謎の挙動に出会ってはまったこと&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; *BSDではそのような謎の挙動を観測したことがないこと&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; XenServer 上で GuestVM として構築すること&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; つまりはxe-guest-utilitiesを入れたいということ。&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; NAS4Freeは現在の段階でも、まだFreeBSD 9系統なので、Full Virtual でしか動作しない&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; NAS4Free の HAST は Still Experimental であって、それなら FreeBSD 10.1 でも同じであること&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
仮想基盤の Storage が NAS4Free で RAID-Z2 であることと、HAST で筐体間冗長を構成することを考慮し、NFS Server 単体では冗長構成は構築しない。もし、冗長構成を取るなら
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 仮想 HDD を 2 個にし、ZFS Mirror/snapshot を利用&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 仮想 HDD を 3 個にし、RAID-Z1/snapshot を利用&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
する手も考えられるが、今回は容量も50G程度なので、UFS(FFS)を利用する。
&lt;/p&gt;

&lt;p&gt;
なお、当然のことだが、HASTの冗長は「片側を書き換えたら即逆側も書き換わる」冗長なので、いわゆるBackupではない。冗長である。なので、当然Backupは定期的に取るに越したことはない。NAS4Free側でsnapshotを取るのも悪くないが、やはりちゃんとbackupを取るべきであろう。
&lt;/p&gt;

&lt;p&gt;
なお、UFSでのsnapshotの取得については、&lt;a href=&quot;http://d.hatena.ne.jp/mteramoto/20090705/p1&quot; class=&quot;urlextern&quot; title=&quot;http://d.hatena.ne.jp/mteramoto/20090705/p1&quot;&gt;ここ&lt;/a&gt;を参照のこと
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;FreeBSD\u3067HAST\/NFS Server\u3092\u7acb\u3066\u308b(Old)&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;freebsd\u3067hast_nfs_server\u3092\u7acb\u3066\u308b_old&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-2904&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;設定&quot;&gt;設定&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
今回は、以下の構成で構築する
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; /dev/ada1 を HAST で冗長化する&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; hast の resource 名は home とする&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; hast で共有する Filesystem は /hast/[resource] (今回は /hast/home) に mount する&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; NFSはv3を利用する&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; これは、NFSv4で頑張るために必要な account 情報をまだ一元管理していないため&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; NFSv2での接続は禁止する。そのために、vfs.nfsd.server_min_nfsvers=3 を設定する&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; NFSv3ではTCP/UDP共に許可する&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; NFS Serverとしてのアドレスは CARP のものを利用する&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; NFS で export するDirectoryは /hast 下のもののみとする&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u8a2d\u5b9a&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u8a2d\u5b9a&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;2905-3581&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;とにかく_freebsd_を_install&quot;&gt;とにかく FreeBSD を Install&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
諸元
&lt;/p&gt;
&lt;div class=&quot;table sectionedit4&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0 centeralign&quot;&gt;  &lt;abbr title=&quot;Operating System&quot;&gt;OS&lt;/abbr&gt;    &lt;/td&gt;&lt;td class=&quot;col1&quot; colspan=&quot;2&quot;&gt; FreeBSD 10.1 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; vCPU   &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot; colspan=&quot;2&quot;&gt; 1            &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Memory &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot; colspan=&quot;2&quot;&gt; 1024MB       &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; HDD    &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Boot   &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; 20GB &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; HDD    &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Export &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; 50GB &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; NIC    &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot; colspan=&quot;2&quot;&gt; 2            &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;3635-3796&amp;quot;} --&gt;
&lt;p&gt;
とりあえず、普通にInstall
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ports/src のみを Installする (srcは不要かもしれない)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; Disk は以下のように設定(自動で作成し、HDDはada0のみを選択する)&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; ada1も同時に構築しようとすると、正しくDiskが構築されない。これはおそらくFreeBSDの不具合&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;table sectionedit5&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;thead&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; ada0   &lt;/th&gt;&lt;th class=&quot;col1 leftalign&quot; colspan=&quot;2&quot;&gt; GPT                 &lt;/th&gt;&lt;th class=&quot;col3&quot;&gt; 備考 &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; ada0p1 &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Freebsd-boot &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; 512KB &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; FreeBSD Boot code上の制限 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; ada0p2 &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Freebsd-ufs  &lt;/td&gt;&lt;td class=&quot;col2 rightalign&quot;&gt;  19GB &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; ada0p3 &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Freebsd-swap &lt;/td&gt;&lt;td class=&quot;col2 rightalign&quot;&gt;   1GB &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table1&amp;quot;,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;4126-4306&amp;quot;} --&gt;&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; sshd/ntpd/powerd/dumpdev を設定&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 追加 Account を作成&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u3068\u306b\u304b\u304f FreeBSD \u3092 Install&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u3068\u306b\u304b\u304f_freebsd_\u3092_install&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;3582-4376&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;初期設定&quot;&gt;初期設定&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ntp Server関連の設定&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; sshd関連の設定&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 追加NICの設定 (/etc/rc.conf)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; fstabの修正(procfsを追加)&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;proc /proc procfs rw 0 0&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; OSのUpdate&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;freebsd-update fetch&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;freebsd-update install&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;portsnap fetch&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;portsnap update&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; XenServer 上で PV Guest にする&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;pkg install xe-guest-utilities&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;echo &amp;#039;xenguest_enable=“YES”&amp;#039; » /etc/rc.conf.local&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; /etc/sysctl.confに以下を追加&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; vfs.nfsd.server_min_nfsvers=3&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; net.inet.carp.allow=1&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; net.inet.carp.preempt=1&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
ここまで出来たら、shutdownして、VMをCopyし、２台目の設定を実施する。
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u521d\u671f\u8a2d\u5b9a&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u521d\u671f\u8a2d\u5b9a&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;4377-5067&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;hast_設定&quot;&gt;HAST 設定&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
HASTが動作するためには、GEOM_GATE(geom_gate.ko)がkernelにlinkされている必要がある。
通常は、hastdが起動されるタイミングでLKMとして読み込まれる(kernelにlinkされる)が、staticにkernelにlinkするならkernelを再構築する。その際 &lt;strong&gt;OPTIONS GEOM_GATE&lt;/strong&gt; を追加すること
&lt;/p&gt;

&lt;p&gt;
HASTの設定は、/etc/hast.confに記載する。
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;#
# HAST: Highly Available STorage configuration.
#

# General configuration
listen		tcp4://0.0.0.0:8457
replication	fullsync
compression	lzf
timeout		10

on nfs001 {
	listen	tcp4://10.1.101.3:8457
}
on nfs002 {
	listen	tcp4://10.1.101.4:8457
}

# node configuration
resource home {
	local	/dev/ada1
	on nfs001 {
		remote	tcp4://10.1.101.4:8457
	}
	on nfs002 {
		remote	tcp4://10.1.101.3:8457
	}
}&lt;/pre&gt;
&lt;ol&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; HASTで同期する両サーバーで以下を実行&lt;/div&gt;
&lt;ol&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; /etc/hast.conf を作成する&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;hastctl create home&lt;/code&gt; を実行&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;service hastd onestart&lt;/code&gt; を実行&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; HASTのPrimary側で以下を実行&lt;/div&gt;
&lt;ol&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;hastctl role primary home&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; HASTのSecondary側で以下を実行&lt;/div&gt;
&lt;ol&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;hastctl role secondary home&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; 両方で以下を実行&lt;/div&gt;
&lt;ol&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;hastctl status home&lt;/code&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; この結果のstatusが complete であるなら、同期は完了している&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; この結果のstatusが degraded であるなら、設定の何かが間違っているので確認する&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;hastctl list -d home&lt;/code&gt;を実行すると、詳細な情報が出力される。この時dirtyが0であることを確認する&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; HASTのPrimary側で以下を実行&lt;/div&gt;
&lt;ol&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; ファイルシステムを構築する : &lt;code&gt;newfs -O2 -U -j /dev/hast/home&lt;/code&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; 今回は、UFS/Soft-update(-U)/soft-update journaling(SUJ)(-j)を生かす設定にする。&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; gjournalを利用する場合、-jを-Jに変える。&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; snapshotを取得できるようにするため、-nは指定しない。&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;mkdir /home&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;mount /dev/hast/home /home&lt;/code&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; これで、HASTで同期しているFilesystemがPrimary側でmountされた。&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;echo &amp;#039;hastd_enable=“YES”&amp;#039; » /etc/rc.conf.local&lt;/code&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; これで再起動時に自動的にHASTdが動作する&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; /etc/fstabに必要な情報を記載する&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
HASTの制御コマンドは以下
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;hastctl status [resource]&lt;/code&gt; : HAST resource [resource] の状態を見る&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;hastctl status all&lt;/code&gt; : HASTに登録されている全ての[resource]の状態を見る&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;hastctl role primary [resource]&lt;/code&gt; [resource]をPrimaryにする&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; このタイミングで、/dev/hast/[resource]が生える&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;hastctl role secondary [resource]&lt;/code&gt;　[resource]をSecondaryにする&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; このタイミングで、/dev/hast/[resource]が消える&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;hastctl list [resource]&lt;/code&gt; : [resource]の詳細情報を表示する&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;HAST \u8a2d\u5b9a&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;hast_\u8a2d\u5b9a&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;5068-7880&amp;quot;} --&gt;
&lt;h4 class=&quot;sectionedit8&quot; id=&quot;hastdがsplit-brainを通知する場合&quot;&gt;hastdがSplit-Brainを通知する場合&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
hastで共有しているDiskの状態がおかしくなったので、以下を実施する
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; まず、secondary側でhastctl create [resource]してみる。&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; これでエラーが出なければ、primary側でdirtyを確認し、dirtyが0になればOK&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; これでダメな場合、以下を実行する&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; とにかくhastの同期を切り離す (片方(仮にBとする)のI/Fをdownするのが手っ取り早い)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; Bで、以下の作業を実施する&lt;/div&gt;
&lt;ol&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; hastctl role primary して、FSをmountする&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; DataのBackupを取得する&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; Bをhastctl role init [resource] → hastctl create [resource] → hastctl role secondary [resource] して初期化する&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; HASTの同期を再開する (I/Fをあげるのが良い)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; primary側がDegradedになり、同期が開始される。&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; primary側のdirtyが0になり完全に同期するのを待つ&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; primary側にBから取得したバックアップから必要なファイルを書き込む&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
とりあえず、これが一番手っ取り早い。
&lt;/p&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_round wrap_warning plugin_wrap&quot;&gt;
&lt;p&gt;
split-brain状態になっていることを検出し、勝手にhastctl createするようにする方策を考えなければならない
&lt;/p&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;hastd\u304cSplit-Brain\u3092\u901a\u77e5\u3059\u308b\u5834\u5408&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;hastd\u304csplit-brain\u3092\u901a\u77e5\u3059\u308b\u5834\u5408&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;7881-9139&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit11&quot; id=&quot;carpの設定&quot;&gt;CARPの設定&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
ここまでで、HAST deviceは作成できた。
&lt;/p&gt;

&lt;p&gt;
ここからは、CARPとdevdを利用して、Failoverの設定を行う
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;echo &amp;#039;carp_load=“YES”&amp;#039; » /boot/loader.conf&lt;/code&gt; を実行&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; 初期設定する場合、rebootするのは面倒なので、&lt;code&gt;kldload carp&lt;/code&gt;を実行する&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; kernelにstatic linkしておくには、&lt;code&gt;devide CARP&lt;/code&gt;を追加する&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; /etc/rc.confに以下を追加&lt;/div&gt;
&lt;ol&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; Primaryマシンに &lt;code&gt;ifconfig_xn1_alias0=“vhid 2 advskew 10 pass UltraSecret alias xxx.xxx.xxx.xxx/32”&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; Secondaryマシンに &lt;code&gt;ifconfig_xn1_alias0=“vhid 2 advskew 10 pass UltraSecret alias xxx.xxx.xxx.xxx/32”&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
これでCARPの設定は終了。
&lt;/p&gt;

&lt;p&gt;
CARPのI/FをBACKUPに切り替えるには、&lt;code&gt;ifconfig xn1 vhid 2 state backup&lt;/code&gt; でOK
&lt;/p&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:12,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_round wrap_warning plugin_wrap&quot;&gt;
&lt;p&gt;
ifconfig state backup で CARP の state を変化させた場合、相手側の I/F の state は変化しない。
&lt;/p&gt;

&lt;p&gt;
従って、host-1 でifconfig xn1 vhid 2 state backup を実行した場合、host-2 で ifconfig xn1 vhid 2 state master を実行すること
&lt;/p&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:13,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:14,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_round wrap_warning plugin_wrap&quot;&gt;
&lt;p&gt;
VHIDは、KeepalivedやVRRPなどのVHIDと衝突しないように設定する必要があるので、注意
&lt;/p&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:15,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;p&gt;
FreeBSDのCARPはVRRPと異なり、自分がBACKUPの時でも共有IPアドレスが自身に割り当てられているものとして扱われる。つまり、host-1がCARP MASTER、host-2がCARP BACKUPであって、共有IP AddressがAddr(s)であるとすると、Addr(s)への通信に返事を返すのはhost-1のみであるが、host-2のInterface Address TableにもAddr(s)が載る。
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;CARP\u306e\u8a2d\u5b9a&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;carp\u306e\u8a2d\u5b9a&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;9140-10755&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit16&quot; id=&quot;devdの設定&quot;&gt;devdの設定&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
前項のCARPまで設定が終了すれば、HASTで同期しているFilesystemを公開する準備が整っている。
この時利用できるProtocolとしては、SAMBAやNFSがある。iSCSIは動作するか微妙。
&lt;/p&gt;

&lt;p&gt;
そこで、Interfaceの状態が変化した場合にhastのroleを変化させる設定を行う。
この設定は、devdを利用する。
&lt;/p&gt;

&lt;p&gt;
まず、/etc/dev.confの末尾に、以下を追記する。
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;notify 100 {
	match &amp;quot;system&amp;quot; &amp;quot;CARP&amp;quot;;
	match &amp;quot;subsystem&amp;quot; &amp;quot;[0-9]+@[0-9a-z]+&amp;quot;;
	match &amp;quot;type&amp;quot; &amp;quot;(MASTER|BACKUP|INIT)&amp;quot;;
	action &amp;quot;/usr/local/sbin/carp-hast-switch $subsystem $type&amp;quot;;
};&lt;/pre&gt;

&lt;p&gt;
その後、&lt;code&gt;service devd restart&lt;/code&gt;を実行する
&lt;/p&gt;

&lt;p&gt;
次に、/usr/local/sbin/carp-hast-switchを作成する。
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 2015/04/16 Release版&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 2015/11/22 更新: Boot時の問題を解決。&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;http://www.seirios.org/seirios/dokuwiki/doku.php?do=export_code&amp;amp;id=os:freebsd:hast:old&amp;amp;codeblock=2&quot; title=&quot;この部分をダウンロード&quot; class=&quot;mediafile mf_&quot;&gt;carp-hast-switch&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co0&quot;&gt;#! /bin/sh&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;#&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# carp-hast-switch: shell script for change hast role when carp&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;#                   status is changed.&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;#&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Original script by Freddie Cash &amp;lt;fjwcash@gmail.com&amp;gt;&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# Modified by Michael W. Lucas &amp;lt;mwlucas@BlackHelicopters.org&amp;gt;&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# and Viktor Petersson &amp;lt;vpetersson@wireload.net&amp;gt;&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# and HEO SeonMeyong &amp;lt;seirios@seirios.org&amp;gt;&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# Last modified 2015/11/10 HEO SeonMeyong &amp;lt;seirios@seirios.org&amp;gt;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# ***WARNINGS***&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# Need net.inet.carp.preempt=1 and same of advskew on carp.&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# Currently HAST device must formatted by UFS&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# ZFS code is impremented but not checked.&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;#     This script is assumed to match the ZFS pool name and HAST resource name &lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;##############################################################################&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# Setting Variables and parse Arguments.&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;#DEBUG=1&lt;/span&gt;
&lt;span class=&quot;re2&quot;&gt;SYSLOG_FACILITY&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;user.notice&amp;quot;&lt;/span&gt;
&lt;span class=&quot;re2&quot;&gt;SYSLOG_TAG&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;carp-hast&amp;quot;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;re2&quot;&gt;IF&lt;/span&gt;=&lt;span class=&quot;co1&quot;&gt;${1%@*}&lt;/span&gt;
&lt;span class=&quot;re2&quot;&gt;VHID&lt;/span&gt;=&lt;span class=&quot;co1&quot;&gt;${1#*@}&lt;/span&gt;
&lt;span class=&quot;re2&quot;&gt;ACTION&lt;/span&gt;=&lt;span class=&quot;re4&quot;&gt;$2&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Work around for boot time. devd execute this script before start hastd.&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;`/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;pgrep hastd&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es3&quot;&gt;${ACTION}&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt;
    MASTER&lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt;BACKUP&lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt;INIT&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
	&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;logger &lt;span class=&quot;re5&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_FACILITY}&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_TAG}&lt;/span&gt; \
		        &lt;span class=&quot;st0&quot;&gt;&amp;quot;State Changed. I/F: &lt;span class=&quot;es3&quot;&gt;${IF}&lt;/span&gt; VHID: &lt;span class=&quot;es3&quot;&gt;${VHID}&lt;/span&gt; state: &lt;span class=&quot;es3&quot;&gt;${ACTION}&lt;/span&gt;&amp;quot;&lt;/span&gt;
	&lt;span class=&quot;sy0&quot;&gt;;;&lt;/span&gt;
    &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
	&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;logger &lt;span class=&quot;re5&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_FACILITY}&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_TAG}&lt;/span&gt; \
                        &lt;span class=&quot;st0&quot;&gt;&amp;quot;FATAL: &lt;span class=&quot;es3&quot;&gt;${ACTION}&lt;/span&gt; is not yet implemented&amp;quot;&lt;/span&gt;
	&lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;
	&lt;span class=&quot;sy0&quot;&gt;;;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;esac&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;##############################################################################&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# Get resources.&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;re2&quot;&gt;HASTDEV&lt;/span&gt;=&lt;span class=&quot;sy0&quot;&gt;`/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;hastctl dump all &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;grep&lt;/span&gt; resource &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;sed&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;s/^.*:\ *//&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;x&amp;quot;&lt;/span&gt;&lt;span class=&quot;re1&quot;&gt;$DEBUG&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;= &lt;span class=&quot;st0&quot;&gt;&amp;quot;x&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;HASTDEV = &lt;span class=&quot;es3&quot;&gt;${HASTDEV}&lt;/span&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-z&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es3&quot;&gt;${HASTDEV}&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;		&lt;span class=&quot;co0&quot;&gt;# no hast device.&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# get all carp interfaces&lt;/span&gt;
&lt;span class=&quot;re2&quot;&gt;ifs&lt;/span&gt;=&lt;span class=&quot;sy0&quot;&gt;`/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;ifconfig&lt;/span&gt; -l&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; i &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${ifs}&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;do&lt;/span&gt;
    &lt;span class=&quot;re2&quot;&gt;no_of_carp&lt;/span&gt;=&lt;span class=&quot;sy0&quot;&gt;`/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;ifconfig&lt;/span&gt; &lt;span class=&quot;re1&quot;&gt;$i&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;grep&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-c&lt;/span&gt; carp&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;x&amp;quot;&lt;/span&gt;&lt;span class=&quot;re1&quot;&gt;$DEBUG&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;= &lt;span class=&quot;st0&quot;&gt;&amp;quot;x&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Interface &lt;span class=&quot;es2&quot;&gt;$i&lt;/span&gt; has &lt;span class=&quot;es3&quot;&gt;${no_of_carp}&lt;/span&gt; CARP configuration&amp;quot;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${no_of_carp}&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;= &lt;span class=&quot;st0&quot;&gt;&amp;quot;0&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;carps&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es3&quot;&gt;${carps}&lt;/span&gt; &lt;span class=&quot;es2&quot;&gt;$i&lt;/span&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;done&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;x&amp;quot;&lt;/span&gt;&lt;span class=&quot;re1&quot;&gt;$DEBUG&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;= &lt;span class=&quot;st0&quot;&gt;&amp;quot;x&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;CARP I/F = &lt;span class=&quot;es3&quot;&gt;${carps}&lt;/span&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-z&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es3&quot;&gt;${carps}&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;		&lt;span class=&quot;co0&quot;&gt;# no carp I/F.&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;re2&quot;&gt;PREEMPTION&lt;/span&gt;=&lt;span class=&quot;sy0&quot;&gt;`/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;sysctl net.inet.carp.preempt &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;awk&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;{print $2}&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;x&amp;quot;&lt;/span&gt;&lt;span class=&quot;re1&quot;&gt;$DEBUG&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;= &lt;span class=&quot;st0&quot;&gt;&amp;quot;x&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;CARP preemption = &lt;span class=&quot;es3&quot;&gt;${PREEMPTION}&lt;/span&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${PREEMPTION}&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;= &lt;span class=&quot;st0&quot;&gt;&amp;quot;1&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;	&lt;span class=&quot;co0&quot;&gt;# No carp preemption. May cause failure.&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;##############################################################################&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# Main.&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es3&quot;&gt;${ACTION}&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt;
    &lt;span class=&quot;st0&quot;&gt;&amp;quot;MASTER&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
	&lt;span class=&quot;co0&quot;&gt;# make sure all carp is master.&lt;/span&gt;
	&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-n&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es3&quot;&gt;${carps}&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
	    &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${carps}&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;do&lt;/span&gt;
		&lt;span class=&quot;re2&quot;&gt;vhid&lt;/span&gt;=&lt;span class=&quot;sy0&quot;&gt;`/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;ifconfig&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${if}&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;grep&lt;/span&gt; carp &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;awk&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;{print $3 &amp;quot; &amp;quot; $4}&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;
		&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;ifconfig&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${if}&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${vhid}&lt;/span&gt; state master
	    &lt;span class=&quot;kw1&quot;&gt;done&lt;/span&gt;
	&lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
&amp;nbsp;
	&lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; disk &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${HASTDEV}&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;do&lt;/span&gt;
            &lt;span class=&quot;co0&quot;&gt;# If there is secondary worker process, it means that remote primary process is&lt;/span&gt;
            &lt;span class=&quot;co0&quot;&gt;# still running. We have to wait for it to terminate.&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; i &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;jot &lt;span class=&quot;nu0&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;do&lt;/span&gt;
                &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;pgrep &lt;span class=&quot;re5&quot;&gt;-f&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;hastd: &lt;span class=&quot;es3&quot;&gt;${disk}&lt;/span&gt; \(secondary\)&amp;quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;gt;/&lt;/span&gt;dev&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;null &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;break&lt;/span&gt;
		&lt;span class=&quot;kw2&quot;&gt;sleep&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;
	    &lt;span class=&quot;kw1&quot;&gt;done&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; pgrep &lt;span class=&quot;re5&quot;&gt;-f&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;hastd: &lt;span class=&quot;es3&quot;&gt;${disk}&lt;/span&gt; \(secondary\)&amp;quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;gt;/&lt;/span&gt;dev&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;null &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
	        &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;logger &lt;span class=&quot;re5&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_FACILITY}&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_TAG}&lt;/span&gt; \
		                &lt;span class=&quot;st0&quot;&gt;&amp;quot;FATAL: Secondary process for resource &lt;span class=&quot;es3&quot;&gt;${disk}&lt;/span&gt; is still running after 30 seconds.&amp;quot;&lt;/span&gt;
                &lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
&amp;nbsp;
	    &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;logger &lt;span class=&quot;re5&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_FACILITY}&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_TAG}&lt;/span&gt; \
		            &lt;span class=&quot;st0&quot;&gt;&amp;quot;Role for HAST resources &lt;span class=&quot;es3&quot;&gt;${disk}&lt;/span&gt; switched to primary.&amp;quot;&lt;/span&gt;
	    &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;hastctl role primary &lt;span class=&quot;co1&quot;&gt;${disk}&lt;/span&gt;
	    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re4&quot;&gt;$?&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-ne&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
		&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;logger &lt;span class=&quot;re5&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_FACILITY}&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_TAG}&lt;/span&gt; \
			        &lt;span class=&quot;st0&quot;&gt;&amp;quot;FATAL: Unable to change role to primary for resource &lt;span class=&quot;es3&quot;&gt;${disk}&lt;/span&gt;.&amp;quot;&lt;/span&gt;
		&lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;
	    &lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
	&lt;span class=&quot;kw1&quot;&gt;done&lt;/span&gt;
&amp;nbsp;
	&lt;span class=&quot;co0&quot;&gt;# Wait for the /dev/hast/* devices to appear&lt;/span&gt;
	&lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; disk &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${HASTDEV}&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;do&lt;/span&gt;
	    &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; loop &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; $&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; jot &lt;span class=&quot;nu0&quot;&gt;120&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;do&lt;/span&gt;
		&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-c&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;/dev/hast/&lt;span class=&quot;es3&quot;&gt;${disk}&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;break&lt;/span&gt;
		&lt;span class=&quot;kw2&quot;&gt;sleep&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0.5&lt;/span&gt;
	    &lt;span class=&quot;kw1&quot;&gt;done&lt;/span&gt;
&amp;nbsp;
	    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-c&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;/dev/hast/&lt;span class=&quot;es3&quot;&gt;${disk}&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
		&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;logger &lt;span class=&quot;re5&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_FACILITY}&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_TAG}&lt;/span&gt; \
			        &lt;span class=&quot;st0&quot;&gt;&amp;quot;FATAL: GEOM provider /dev/hast/&lt;span class=&quot;es3&quot;&gt;${disk}&lt;/span&gt; did not appear.&amp;quot;&lt;/span&gt;
		&lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;
	    &lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
            &lt;span class=&quot;re2&quot;&gt;FSFMT&lt;/span&gt;=&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;file&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-bs&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;dev&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;hast&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;co1&quot;&gt;${disk}&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re4&quot;&gt;$?&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-ne&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
		&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;logger &lt;span class=&quot;re5&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_FACILITY}&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_TAG}&lt;/span&gt; \
			        &lt;span class=&quot;st0&quot;&gt;&amp;quot;FATAL: /dev/hast/&lt;span class=&quot;es3&quot;&gt;${disk}&lt;/span&gt; cannot define FS format.&amp;quot;&lt;/span&gt;
		&lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
            &lt;span class=&quot;re2&quot;&gt;FSFMT&lt;/span&gt;=&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${FSFMT}&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;awk&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;{print $1 &amp;quot; &amp;quot; $2}&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${FSFMT}&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt;
                &lt;span class=&quot;st0&quot;&gt;&amp;quot;Unix Fast&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
                    &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;fsck &lt;span class=&quot;re5&quot;&gt;-y&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; ufs &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;dev&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;hast&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;co1&quot;&gt;${disk}&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;gt;/&lt;/span&gt;dev&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;null &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;
                    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re4&quot;&gt;$?&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-ne&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
                        &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;logger &lt;span class=&quot;re5&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_FACILITY}&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_TAG}&lt;/span&gt; \
                                        &lt;span class=&quot;st0&quot;&gt;&amp;quot;FATAL: UFS fsck /dev/hast/&lt;span class=&quot;es3&quot;&gt;${disk}&lt;/span&gt; failed.&amp;quot;&lt;/span&gt;
                        &lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;
                    &lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
                    &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;logger &lt;span class=&quot;re5&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_FACILITY}&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_TAG}&lt;/span&gt; \
                                    &lt;span class=&quot;st0&quot;&gt;&amp;quot;fsck /dev/hast/&lt;span class=&quot;es3&quot;&gt;${disk}&lt;/span&gt; finished.&amp;quot;&lt;/span&gt;
 	            &lt;span class=&quot;re2&quot;&gt;e_code&lt;/span&gt;=&lt;span class=&quot;sy0&quot;&gt;`/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;mount&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;dev&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;hast&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;co1&quot;&gt;${disk}&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;hast&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;co1&quot;&gt;${disk}&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;
                    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re4&quot;&gt;$?&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-ne&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
	                &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;logger &lt;span class=&quot;re5&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_FACILITY}&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_TAG}&lt;/span&gt; \
		                        &lt;span class=&quot;st0&quot;&gt;&amp;quot;FATAL: UFS mount for resource &lt;span class=&quot;es3&quot;&gt;${disk}&lt;/span&gt; failed: &lt;span class=&quot;es3&quot;&gt;${e_code}&lt;/span&gt;.&amp;quot;&lt;/span&gt;
                        &lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;
                    &lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
                    &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;logger &lt;span class=&quot;re5&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_FACILITY}&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_TAG}&lt;/span&gt; \
                                    &lt;span class=&quot;st0&quot;&gt;&amp;quot;UFS /dev/hast/&lt;span class=&quot;es3&quot;&gt;${disk}&lt;/span&gt; is mounted.&amp;quot;&lt;/span&gt;
                    &lt;span class=&quot;sy0&quot;&gt;;;&lt;/span&gt;
                &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
                    &lt;span class=&quot;co0&quot;&gt;# If not UFS, Assume that filesystem is ZFS.&lt;/span&gt;
                    &lt;span class=&quot;re2&quot;&gt;e_code&lt;/span&gt;=&lt;span class=&quot;sy0&quot;&gt;`/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;zpool import &lt;span class=&quot;re5&quot;&gt;-f&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${disk}&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;
                    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re4&quot;&gt;$?&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-ne&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
	                &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;logger &lt;span class=&quot;re5&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_FACILITY}&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_TAG}&lt;/span&gt; \
                                        &lt;span class=&quot;st0&quot;&gt;&amp;quot;FATAL: ZFS import for resource &lt;span class=&quot;es3&quot;&gt;${disk}&lt;/span&gt; failed: &lt;span class=&quot;es3&quot;&gt;${e_code}&lt;/span&gt;.&amp;quot;&lt;/span&gt;
                        &lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;
                    &lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
                    &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;logger &lt;span class=&quot;re5&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_FACILITY}&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_TAG}&lt;/span&gt; \
                                    &lt;span class=&quot;st0&quot;&gt;&amp;quot;ZFS &lt;span class=&quot;es3&quot;&gt;${disk}&lt;/span&gt; is imported.&amp;quot;&lt;/span&gt;
                    &lt;span class=&quot;sy0&quot;&gt;;;&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;esac&lt;/span&gt;
	&lt;span class=&quot;kw1&quot;&gt;done&lt;/span&gt;
        &lt;span class=&quot;co0&quot;&gt;# NFS Service ( run nfsd and mountd. )&lt;/span&gt;
	&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;service rpcbind restart
	&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;service statd restart
	&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;service lockd restart
        &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;service nfsd restart
        &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;service mountd restart
	&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;logger &lt;span class=&quot;re5&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_FACILITY}&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_TAG}&lt;/span&gt; \
			&lt;span class=&quot;st0&quot;&gt;&amp;quot;NFS started.&amp;quot;&lt;/span&gt;
&amp;nbsp;
	&lt;span class=&quot;co0&quot;&gt;# iSCSI service&lt;/span&gt;
	&lt;span class=&quot;co0&quot;&gt;# /etc/rc.d/iscsi_target start&lt;/span&gt;
	&lt;span class=&quot;sy0&quot;&gt;;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;st0&quot;&gt;&amp;quot;BACKUP&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;INIT&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
	&lt;span class=&quot;co0&quot;&gt;# make sure all carp is backup&lt;/span&gt;
	&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-n&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es3&quot;&gt;${carps}&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
	    &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${carps}&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;do&lt;/span&gt;
		&lt;span class=&quot;re2&quot;&gt;vhid&lt;/span&gt;=&lt;span class=&quot;sy0&quot;&gt;`/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;ifconfig&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${if}&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;grep&lt;/span&gt; carp &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;awk&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;{print $3 &amp;quot; &amp;quot; $4}&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;
		&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;ifconfig&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${if}&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${vhid}&lt;/span&gt; state backup
	    &lt;span class=&quot;kw1&quot;&gt;done&lt;/span&gt;
	&lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;co0&quot;&gt;# stop iSCSI service&lt;/span&gt;
	&lt;span class=&quot;co0&quot;&gt;# /etc/rc.d/iscsi_target forcestop&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;co0&quot;&gt;# NFS Service ( stop nfsd and mountd. ) &lt;/span&gt;
        &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;service mountd forcestop
        &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;service nfsd forcestop
	&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;service lockd forcestop
	&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;service statd forcestop
	&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;service rpcbind forcestop
	&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;logger &lt;span class=&quot;re5&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_FACILITY}&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_TAG}&lt;/span&gt; \
			&lt;span class=&quot;st0&quot;&gt;&amp;quot;NFS stoped.&amp;quot;&lt;/span&gt;
&amp;nbsp;
	&lt;span class=&quot;co0&quot;&gt;# Switch roles for the HAST resources&lt;/span&gt;
	&lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; disk &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${HASTDEV}&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;do&lt;/span&gt;
	    &lt;span class=&quot;kw2&quot;&gt;sleep&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;
	    &lt;span class=&quot;co0&quot;&gt;# First of all, set hast status to secondary.&lt;/span&gt;
	    &lt;span class=&quot;co0&quot;&gt;# Do not touch device before hast status become secondary.&lt;/span&gt;
	    &lt;span class=&quot;co0&quot;&gt;# This work protects to become split-brain status.&lt;/span&gt;
	    &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;hastctl role secondary &lt;span class=&quot;co1&quot;&gt;${disk}&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;
	    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re4&quot;&gt;$?&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-ne&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
		&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;logger &lt;span class=&quot;re5&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_FACILITY}&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_TAG}&lt;/span&gt; \
			        &lt;span class=&quot;st0&quot;&gt;&amp;quot;FATAL: Unable to switch role to secondary for resource &lt;span class=&quot;es3&quot;&gt;${disk}&lt;/span&gt;.&amp;quot;&lt;/span&gt;
		&lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;
	    &lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
	    &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;logger &lt;span class=&quot;re5&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_FACILITY}&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_TAG}&lt;/span&gt; \
		            &lt;span class=&quot;st0&quot;&gt;&amp;quot;Role switched to secondary for resource &lt;span class=&quot;es3&quot;&gt;${disk}&lt;/span&gt;.&amp;quot;&lt;/span&gt;
	    &lt;span class=&quot;co0&quot;&gt;# Unmount UFS&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; i &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;`/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;mount&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;awk&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;{print $1 &amp;quot;:&amp;quot; substr($4,2)}&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;grep&lt;/span&gt; hast&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;do&lt;/span&gt;
                &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${i%:*}&lt;/span&gt; = &lt;span class=&quot;st0&quot;&gt;&amp;quot;/dev/hast/&lt;span class=&quot;es3&quot;&gt;${disk}&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
                    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${i#*:}&lt;/span&gt; = &lt;span class=&quot;st0&quot;&gt;&amp;quot;ufs,&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
                        &lt;span class=&quot;re2&quot;&gt;e_code&lt;/span&gt;=&lt;span class=&quot;sy0&quot;&gt;`/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;umount&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;hast&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;co1&quot;&gt;${disk}&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;
                        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re4&quot;&gt;$?&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-ne&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
			    &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;logger &lt;span class=&quot;re5&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_FACILITY}&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_TAG}&lt;/span&gt; \
					    &lt;span class=&quot;st0&quot;&gt;&amp;quot;FATAL: UFS unmount of resource &lt;span class=&quot;es3&quot;&gt;${disk}&lt;/span&gt; failed: &lt;span class=&quot;es3&quot;&gt;${e_code}&lt;/span&gt;&amp;quot;&lt;/span&gt;
                            &lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;
                        &lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
			&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;logger &lt;span class=&quot;re5&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_FACILITY}&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_TAG}&lt;/span&gt; \
					&lt;span class=&quot;st0&quot;&gt;&amp;quot;UFS /dev/hast/&lt;span class=&quot;es3&quot;&gt;${disk}&lt;/span&gt; is unmounted&amp;quot;&lt;/span&gt;
                    &lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
                &lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;done&lt;/span&gt;
&amp;nbsp;
	    &lt;span class=&quot;co0&quot;&gt;# Export ZFS&lt;/span&gt;
            zpool list &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;egrep&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-q&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;^&lt;span class=&quot;es3&quot;&gt;${disk}&lt;/span&gt; &amp;quot;&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re4&quot;&gt;$?&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-eq&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
                &lt;span class=&quot;co0&quot;&gt;# Force export ZFS pool.&lt;/span&gt;
                &lt;span class=&quot;re2&quot;&gt;e_code&lt;/span&gt;=&lt;span class=&quot;sy0&quot;&gt;`/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;zpool &lt;span class=&quot;kw3&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-f&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${disk}&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;
	        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re4&quot;&gt;$?&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-ne&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
		    &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;logger &lt;span class=&quot;re5&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_FACILITY}&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_TAG}&lt;/span&gt; \
                                    &lt;span class=&quot;st0&quot;&gt;&amp;quot;FATAL: ZFS export of resource &lt;span class=&quot;es3&quot;&gt;${disk}&lt;/span&gt; failed: &lt;span class=&quot;es3&quot;&gt;${e_code}&lt;/span&gt;.&amp;quot;&lt;/span&gt;
		    &lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;
	        &lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
                &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;logger &lt;span class=&quot;re5&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_FACILITY}&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_TAG}&lt;/span&gt; \
                                &lt;span class=&quot;st0&quot;&gt;&amp;quot;ZFS &lt;span class=&quot;es3&quot;&gt;${disk}&lt;/span&gt; is exported.&amp;quot;&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
	&lt;span class=&quot;kw1&quot;&gt;done&lt;/span&gt;
	&lt;span class=&quot;sy0&quot;&gt;;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
	&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;logger &lt;span class=&quot;re5&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_FACILITY}&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${SYSLOG_TAG}&lt;/span&gt; \
		        &lt;span class=&quot;st0&quot;&gt;&amp;quot;Unknown CARP state. &lt;span class=&quot;es3&quot;&gt;${STATE}&lt;/span&gt;&amp;quot;&lt;/span&gt;
	&lt;span class=&quot;sy0&quot;&gt;;;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;esac&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;##############################################################################&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# Local Variables:&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# coding: utf-8&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# mode: sh&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# sh-basic-offset: 4&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# sh-indentation: 4&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# End:&lt;/span&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;p&gt;
このファイルは「shell script」なので、&lt;code&gt;chmod 750 carp-hast-switch&lt;/code&gt;と&lt;code&gt;chown root:wheel carp-hast-switch&lt;/code&gt;を実行しておくこと。
&lt;/p&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:17,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_round wrap_warning plugin_wrap&quot;&gt;
&lt;p&gt;
iscsi target関連の設定はコメントアウトしている。(2015/04/14)
&lt;/p&gt;

&lt;p&gt;
FilesystemをmountするDirectoryが/hastにhardcodeされている。(2015/04/14)
&lt;/p&gt;

&lt;p&gt;
ZFSのcodeは組み込んであるが試験をしていない。また、zfsのpool名がhastのresource名と同じであることを仮定している
&lt;/p&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:18,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;p&gt;
最後に、/hastを作成する。&lt;code&gt;mkdir /hast&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
これで、hastがprimaryの時には、/hast/homeが作成される。
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;devd\u306e\u8a2d\u5b9a&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;devd\u306e\u8a2d\u5b9a&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:16,&amp;quot;range&amp;quot;:&amp;quot;10756-21231&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit19&quot; id=&quot;nfs_server_設定&quot;&gt;NFS Server 設定&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
NFSサーバーの設定を行う。
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 詳細は&lt;a href=&quot;https://www.freebsd.org/doc/ja_JP.eucJP/books/handbook/network-nfs.html&quot; class=&quot;urlextern&quot; title=&quot;https://www.freebsd.org/doc/ja_JP.eucJP/books/handbook/network-nfs.html&quot;&gt;https://www.freebsd.org/doc/ja_JP.eucJP/books/handbook/network-nfs.html&lt;/a&gt;を参照&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 日本語の解説は&lt;a href=&quot;http://www.seichan.org/blog/2013/12/post-307.html&quot; class=&quot;urlextern&quot; title=&quot;http://www.seichan.org/blog/2013/12/post-307.html&quot;&gt;ここ&lt;/a&gt;と&lt;a href=&quot;http://www.seichan.org/blog/2014/01/post-320.html&quot; class=&quot;urlextern&quot; title=&quot;http://www.seichan.org/blog/2014/01/post-320.html&quot;&gt;ここ&lt;/a&gt;と&lt;a href=&quot;http://www.seichan.org/blog/2014/01/post-327.html&quot; class=&quot;urlextern&quot; title=&quot;http://www.seichan.org/blog/2014/01/post-327.html&quot;&gt;ここ&lt;/a&gt;がわかりやすくて良い（同じ人の記事だけど)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.allbsd.org/~hrs/diary/201107.html&quot; class=&quot;urlextern&quot; title=&quot;https://www.allbsd.org/~hrs/diary/201107.html&quot;&gt;ここ&lt;/a&gt;にも詳細な情報がある。特にNFSv4関連は必読&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; /etc/rc.conf.localに以下を記述&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;pre class=&quot;code&quot;&gt;rpc_lockd_enable=&amp;quot;YES&amp;quot;
rpc_statd_enable=&amp;quot;YES&amp;quot;
rpcbind_enable=&amp;quot;YES&amp;quot;
portmap_enable=&amp;quot;YES&amp;quot;
mountd_enable=&amp;quot;YES&amp;quot;
mountd_flags=&amp;quot;-r&amp;quot;
nfs_server_enable=&amp;quot;YES&amp;quot;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;/pre&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; mountd_flagsに関してはmanを読むこと。Diskless workstationを利用する場合には“-r”が必要&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; /etc/exportsを記述する&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;pre class=&quot;code&quot;&gt;/hast/home -network xxx.xxx.xxx.xxx/xx -maproot=root&lt;/pre&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:20,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_round wrap_warning plugin_wrap&quot;&gt;
&lt;p&gt;
今回はHome Directoryをshareすることを前提としているので、-maproot=root とか -maproot=0:0を記載しているが、root権限のファイルがNFSでshareされること自体は十分に検討する必要があるので注意すること
&lt;/p&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:21,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;p&gt;
ここまで設定すれば NFS Server が Filesystem を export できるようになっている。
そこで以下のコマンドを実行する
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;# kill -HUP `cat /var/run/mountd.pid`
# showmount -e
/hast/home			xxx.xxx.xxx.xxx/xx
#&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;NFS Server \u8a2d\u5b9a&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;nfs_server_\u8a2d\u5b9a&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:19,&amp;quot;range&amp;quot;:&amp;quot;21232-22791&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit22&quot; id=&quot;nfs_client_設定&quot;&gt;NFS client 設定&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
NFS Client側では、/etc/fstabに必要な設定を投入すれば、FilesystemをNFSでmountできる。
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;host-carp:/hast/home	/home	nfs	rw,noinet6,tcp,soft,noatime,nfsv3,bg,wsize=32768,rsize=32768	0 0
#host-carp:/hast/home	/home	nfs	rw,noinet6,tcp,hard,intr,noatime,nfsv3,bg,wsize=32768,rsize=32768	0 0&lt;/pre&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:23,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_round plugin_wrap&quot;&gt;
&lt;p&gt;
/usrなどの「必須filesystem」をmountする場合には、hard,intrを、/homeのような「システムに必須ではない」ファイルシステムはsoftを指定すると良い。
&lt;/p&gt;

&lt;p&gt;
hard,intr : NFSサーバーが落ちている時にファイルシステムにアクセスすると、アクセスができるまで停止する。signalを送ることで割り込み(intr)がかかりエラーが帰る
&lt;/p&gt;

&lt;p&gt;
soft : NFSサーバーが落ちている時にファイルシステムにアクセスすると即時エラーが帰る
&lt;/p&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:24,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:25,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_round plugin_wrap&quot;&gt;
&lt;p&gt;
読み込み・書き込みの最大転送サイズを変更する場合には、&lt;code&gt;wsize=32768,rsize=32768&lt;/code&gt;をつける。
&lt;/p&gt;

&lt;p&gt;
非同期書き込みで良い場合にはasyncをつける
&lt;/p&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:26,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;NFS client \u8a2d\u5b9a&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;nfs_client_\u8a2d\u5b9a&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:6,&amp;quot;secid&amp;quot;:22,&amp;quot;range&amp;quot;:&amp;quot;22792-23908&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit27&quot; id=&quot;起動時の処理について&quot;&gt;起動時の処理について&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:28,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_round plugin_wrap&quot;&gt;
&lt;p&gt;
本節の問題は、carp-hast-switchを書き換えることで、とりあえず解決したはず。
以下は、過去の記録として残すのみで、考慮する必要は(現時点では)ないはず
&lt;/p&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:29,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;p&gt;
サービスでHASTを利用する場合、事前に考えておくべきことが多い。
特に起動時の問題が大きい。定常状態まで行けば、あとはHASTdがSplit-Brainになった場合の対処だけとも言える。
&lt;/p&gt;

&lt;p&gt;
起動時のhastの問題は、
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; hastdは起動されるとresourceをinit状態にする&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 従って、CARPのstatusなどを鑑みて、自身のroleを設定しなければならない&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; しかし、下手するとsplit brainになるからlocalcntとremotecntを確認しなければならない&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
ことである。むしろ、勝手に判断されるよりはましであるとも言える。
&lt;/p&gt;

&lt;p&gt;
上記の問題を考えると、HASTdを起動するタイミングが問題になる。
&lt;/p&gt;

&lt;p&gt;
本記事中に掲載した “carp-hast-switch” はCARPのstateの変化をdevd経由で取得しHASTdのroleを設定している。この時、NFSの挙動も制御しているため、定常状態では十分なのだが、OSの起動時には問題が発生する。
&lt;/p&gt;

&lt;p&gt;
FreeBSDの起動順序では、
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; devdを起動&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; NICが設定される&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; ここでCARPも設定される&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; rpc関連を起動&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; NFS Client関連の起動&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; hastd 起動&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; NFS Server関連の起動&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
となっている。
&lt;/p&gt;

&lt;p&gt;
この起動順序では、以下の問題が発生する
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; devdがNIC設定より前に起動されているため、NIC設定時点でcarp-hast-switchが呼ばれることがある&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; hastdが起動された時には、すでにNICが設定されているため、先のcarp-hast-switchは呼び出されない&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; そのため、hastdが起動されたのちにhastdのroleを設定する方策がない&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; hastd起動時点でNFS関連の設定をしても直後のNFS Serverの設定時点で元の木阿弥になる&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
この問題は、要するに、「hastdの制御」と「hastdを用いたファイルシステムのexport」を混同しているから発生する。従って、この問題に対処するには、結局以下の方策のいずれかを採用するしかない。
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; /etc/rc.localにhast関連の設定を行うscriptを記述する&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; 結局devからhastdが起動される前にcarp-hast-switchを呼び出す問題は解決しない&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; /usr/local/etc/rc.dになんらかのscriptを設置し、起動時に一度だけ読みだすようにする&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; hastdのscriptを修正し、hastdのscriptで処理を行う&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; この場合、nfs関連のscriptもおそらく修正が必要&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; 最終的には本案で解決した。(2015/11/22)&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
上記案のいずれを採用するか決める前に、方針の決定と、問題点を抽出する。
&lt;/p&gt;

&lt;p&gt;
方針は
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; system関連のscriptはいじらない&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; OSのUpdateなどで更新が入った場合に、問題が読めなくなる&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; Update時に気を使わなければならないシステムはミスの温床になる。&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; できる限り単純に実装する&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; 将来なんらかの問題が発生した時に、scriptがprimitiveであることが可読性を上げる&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; 対象をNFSに絞る&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; おそらくiSCSIもSAMBAも制御可能だと思うが、今はそこまで考えない&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; pfによる制御(filteroutなど)は実行しない&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; このサーバーは、あくまでFile Serverとしてしか動作させない&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
ものとする
&lt;/p&gt;

&lt;p&gt;
現時点で把握している問題をいかに挙げる。
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; hastdは、hastdを起動してからresourceが/dev/hastに現れる他での時間が長い&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; (下手すると3sec近くかかる)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; 従って、単純にNFSでexportして、ファイルシステムが公開されるまでの間にNFSでアクセスされるとfile not foundになる。これは、Mail ServerのSpoolなどでは致命的な問題を引き起こす可能性がある&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; 従って、nfsサービスを停止すれば、アクセスできないからwaitがかかるので都合がいい&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; ただし、HARD mountすることが前提になる。softだと、NFSでの接続ができない段階でerrorになるため&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; hastdが起動し、INIT状態である段階でNFSが一度上がってしまう&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; この問題の回避だけならば、nfs_server_enableやmountd_enableをNOにする手がある&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; この手を使うと、rc.conf.localの設定の一貫性を壊す&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level4&quot;&gt;&lt;div class=&quot;li&quot;&gt; 他人がscriptを見て何してるかわからなくなる&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; 他のscriptから判断することも困難になる&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; 従って、この手法は採用できない。&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; hastdが立ち上がり、nfsd/mountdが起動した後、nfsを停止するまでの短時間は、どうしてもNFSによるアクセスによってエラーになる可能性がある。&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; この問題は、この問題が発生する頻度が低いこと(両NFS Serverが同時に再起動している時にのみ発生する)と問題になる時間が短いこと(nfsdが起動されてからnfsdを停止するまでの時間概ね1秒未満)から、許容範囲のリスクであると考えるしかない&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; Daemonの監視・復旧が少し複雑になる&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; localcntとremotecntを比較して、split-brain出ないことを確認しなければならない&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; split-brainである場合、即座にCARPをBACKUPにし、hastdを停止しなければならない&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; CARP StatusとHAST stateを監視し、必要に応じて同期しなければならない&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; この問題は、devdが動作していない時に発生する可能性がある&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; 従って、devdの死活の監視も必須になる&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
&lt;del&gt;以上から、実装としては、
  - carp-hast-nfs-boot を作成し、/usr/local/etcに設置
    * /etc/rc.confにcarp-hast-nfs-boot_enable=“YES”を記述
  - /etc/rc.localに直に記載する
の２案が考えられるが、現時点では、後者のrc.localによる実装を採用する。&lt;/del&gt; (2015/11/22)
&lt;/p&gt;

&lt;p&gt;
結論としては、carp-hast-switchで
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; hastdが起動していない場合には「何もしない」&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
ように実装を修正することで、問題を解決した。
&lt;/p&gt;

&lt;p&gt;
この手法で問題が解決できる理由は、CARPのステータスが「MASTER」になった際に、必ずcarp-hast-switchが呼ばれるため、最終的に正しく設定がなされることが期待出来るからである。
&lt;/p&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;http://www.seirios.org/seirios/dokuwiki/doku.php?do=export_code&amp;amp;id=os:freebsd:hast:old&amp;amp;codeblock=7&quot; title=&quot;この部分をダウンロード&quot; class=&quot;mediafile mf_local&quot;&gt;rc.local&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co0&quot;&gt;# Obsolete. Do not use this.(2015/11/22)&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;#----- HAST initiate (Only boot time needed)&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; checkyesno hastd_enable; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
  &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;hast initializing&amp;quot;&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;`/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;ifconfig&lt;/span&gt; -l&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;do&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;0&amp;quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;= &lt;span class=&quot;sy0&quot;&gt;`/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;ifconfig&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${if}&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;|/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;grep&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-c&lt;/span&gt; carp&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
      &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-n&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es3&quot;&gt;${if}&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
        &lt;span class=&quot;re2&quot;&gt;state&lt;/span&gt;=&lt;span class=&quot;sy0&quot;&gt;`/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;ifconfig&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${if}&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;|/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;grep&lt;/span&gt; carp&lt;span class=&quot;sy0&quot;&gt;|/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;awk&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;{print $2 &amp;quot; &amp;quot; $4}&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-x&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;local&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;carp-hast-switch &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; \
            &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;local&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;carp-hast-switch &lt;span class=&quot;co1&quot;&gt;${state##* }&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;co1&quot;&gt;${if}&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${state%% *}&lt;/span&gt;
        &lt;span class=&quot;kw3&quot;&gt;break&lt;/span&gt;
      &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt;
        &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-n&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot; no carp I/F&amp;quot;&lt;/span&gt;
      &lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
  &lt;span class=&quot;kw1&quot;&gt;done&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;kw3&quot;&gt;unset&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; state
  &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot; ... done&amp;quot;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u8d77\u52d5\u6642\u306e\u51e6\u7406\u306b\u3064\u3044\u3066&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u8d77\u52d5\u6642\u306e\u51e6\u7406\u306b\u3064\u3044\u3066&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:7,&amp;quot;secid&amp;quot;:27,&amp;quot;range&amp;quot;:&amp;quot;23909-31112&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit30&quot; id=&quot;注意点&quot;&gt;注意点&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
FreeBSD 10.1 の段階では、以下の挙動が確認されている。
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; host-1 と host-2 が /dev/ada1 を HAST で共有し、/hast/home に mount されているとする。&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 初期状態では、hast-1 が CARP MASTER/HAST Primary であるとする。&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
この状況において、
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; host-1 がなんらかの事情(OSのUpdateなど)で停止した(もしくは通信不能な状況になった)とする&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; host-1 では、secondaryになったことを受け、filesystemをunmountした&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; これを受けて、host-2が CARP MASTER/HAST Primary に変化した&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; なんらかの作業の結果、/hast/home でファイルの変更(fsckをかける、fileを削除など)が発生したとする&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; これは、/homeとしてNFS Exportし、かつMailを受信したなどの作業を実施した状況と同様&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; host-1が起動(もしくは、通信が復活)し、CARP BACKUP/HAST Secondaryとして復活した&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
という流れが発生したとする。
&lt;/p&gt;

&lt;p&gt;
この時、HASTは、Dirtyが小さい状況であっても「Split-Brain状態になった」と認識し、同期が外れた状況となってしまう。
&lt;/p&gt;
&lt;div class=&quot;table sectionedit31&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;thead&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot; colspan=&quot;2&quot;&gt; 状況			&lt;/th&gt;&lt;th class=&quot;col2 centeralign&quot; colspan=&quot;3&quot;&gt;  host-1                        &lt;/th&gt;&lt;th class=&quot;col5 centeralign&quot; colspan=&quot;3&quot;&gt;  host-2                        &lt;/th&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot; colspan=&quot;2&quot;&gt;			&lt;/th&gt;&lt;th class=&quot;col2 leftalign&quot;&gt; HAST      &lt;/th&gt;&lt;th class=&quot;col3&quot;&gt; localcnt &lt;/th&gt;&lt;th class=&quot;col4&quot;&gt; remotecnt &lt;/th&gt;&lt;th class=&quot;col5 leftalign&quot;&gt; HAST      &lt;/th&gt;&lt;th class=&quot;col6&quot;&gt; localcnt &lt;/th&gt;&lt;th class=&quot;col7&quot;&gt; remotecnt &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt;0&lt;/th&gt;&lt;th class=&quot;col1 leftalign&quot;&gt; 初期状態		&lt;/th&gt;&lt;td class=&quot;col2 leftalign&quot;&gt; primary   &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;     0    &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;     0     &lt;/td&gt;&lt;td class=&quot;col5&quot;&gt; secondary &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;     0    &lt;/td&gt;&lt;td class=&quot;col7 centeralign&quot;&gt;     0     &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt;1&lt;/th&gt;&lt;th class=&quot;col1 leftalign&quot;&gt; host-1 切断		&lt;/th&gt;&lt;td class=&quot;col2 leftalign&quot;&gt; primary   &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;     0    &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;     0     &lt;/td&gt;&lt;td class=&quot;col5&quot;&gt; secondary &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;     0    &lt;/td&gt;&lt;td class=&quot;col7 centeralign&quot;&gt;     0     &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt;2&lt;/th&gt;&lt;th class=&quot;col1 leftalign&quot;&gt; host-1 unmount	&lt;/th&gt;&lt;td class=&quot;col2 leftalign&quot;&gt; primary   &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;     1    &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;     0     &lt;/td&gt;&lt;td class=&quot;col5&quot;&gt; secondary &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;     0    &lt;/td&gt;&lt;td class=&quot;col7 centeralign&quot;&gt;     0     &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt;3&lt;/th&gt;&lt;th class=&quot;col1 leftalign&quot;&gt; host-2 primary	&lt;/th&gt;&lt;td class=&quot;col2&quot;&gt; secondary &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;     1    &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;     0     &lt;/td&gt;&lt;td class=&quot;col5 leftalign&quot;&gt; primary   &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;     0    &lt;/td&gt;&lt;td class=&quot;col7 centeralign&quot;&gt;     0     &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt;4&lt;/th&gt;&lt;th class=&quot;col1 leftalign&quot;&gt; host-2でfsck実行	&lt;/th&gt;&lt;td class=&quot;col2&quot;&gt; secondary &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;     1    &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;     0     &lt;/td&gt;&lt;td class=&quot;col5 leftalign&quot;&gt; primary   &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;     1    &lt;/td&gt;&lt;td class=&quot;col7 centeralign&quot;&gt;     0     &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt;5&lt;/th&gt;&lt;th class=&quot;col1 leftalign&quot;&gt; host-2 mount	&lt;/th&gt;&lt;td class=&quot;col2&quot;&gt; secondary &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;     1    &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;     0     &lt;/td&gt;&lt;td class=&quot;col5 leftalign&quot;&gt; primary   &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;     1    &lt;/td&gt;&lt;td class=&quot;col7 centeralign&quot;&gt;     0     &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row8&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt;6&lt;/th&gt;&lt;th class=&quot;col1 leftalign&quot;&gt; host-1 復帰		&lt;/th&gt;&lt;td class=&quot;col2&quot;&gt; secondary &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;     1    &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;     0     &lt;/td&gt;&lt;td class=&quot;col5 leftalign&quot;&gt; primary   &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;     1    &lt;/td&gt;&lt;td class=&quot;col7 centeralign&quot;&gt;     0     &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row9&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt;7&lt;/th&gt;&lt;th class=&quot;col1 leftalign&quot;&gt; split-brain		&lt;/th&gt;&lt;td class=&quot;col2&quot;&gt; secondary &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;     1    &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;     0     &lt;/td&gt;&lt;td class=&quot;col5 leftalign&quot;&gt; primary   &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;     1    &lt;/td&gt;&lt;td class=&quot;col7 centeralign&quot;&gt;     0     &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row10&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt;8&lt;/th&gt;&lt;th class=&quot;col1 leftalign&quot;&gt; hastctl create home	&lt;/th&gt;&lt;td class=&quot;col2&quot;&gt; secondary &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;     0    &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;     0     &lt;/td&gt;&lt;td class=&quot;col5 leftalign&quot;&gt; primary   &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;     1    &lt;/td&gt;&lt;td class=&quot;col7 centeralign&quot;&gt;     0     &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row11&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt;9&lt;/th&gt;&lt;th class=&quot;col1 leftalign&quot;&gt; 最後		&lt;/th&gt;&lt;td class=&quot;col2&quot;&gt; secondary &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;     0    &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;     0     &lt;/td&gt;&lt;td class=&quot;col5 leftalign&quot;&gt; primary   &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;     1    &lt;/td&gt;&lt;td class=&quot;col7 centeralign&quot;&gt;     0     &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table2&amp;quot;,&amp;quot;secid&amp;quot;:31,&amp;quot;range&amp;quot;:&amp;quot;32284-33352&amp;quot;} --&gt;
&lt;p&gt;
これを見ると、host-1でroleがprimaryの状況のままでunmountしたことが、Degrade、ひいてはSplit-brainの引き金になっているように見える。当初のcarp-hast-switchは、このような実装であったため、ちょっとした試験で頻繁にSplit-Brainとなってしまっていた。なぜumountでsplit-brainが発生するかは不明だが、MemoryとDiskのSyncに起因すると推測している。
&lt;/p&gt;

&lt;p&gt;
この問題は、要するにsecondaryになる前にumountしているのが問題なのだと考えられることから、シナリオを変更して、以下のようにする。
&lt;/p&gt;
&lt;div class=&quot;table sectionedit32&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;thead&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot; colspan=&quot;2&quot;&gt; 状況			&lt;/th&gt;&lt;th class=&quot;col2 centeralign&quot; colspan=&quot;3&quot;&gt;  host-1                        &lt;/th&gt;&lt;th class=&quot;col5 centeralign&quot; colspan=&quot;3&quot;&gt;  host-2                        &lt;/th&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot; colspan=&quot;2&quot;&gt;			&lt;/th&gt;&lt;th class=&quot;col2 leftalign&quot;&gt; HAST      &lt;/th&gt;&lt;th class=&quot;col3&quot;&gt; localcnt &lt;/th&gt;&lt;th class=&quot;col4&quot;&gt; remotecnt &lt;/th&gt;&lt;th class=&quot;col5 leftalign&quot;&gt; HAST      &lt;/th&gt;&lt;th class=&quot;col6&quot;&gt; localcnt &lt;/th&gt;&lt;th class=&quot;col7&quot;&gt; remotecnt &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt;0&lt;/th&gt;&lt;th class=&quot;col1 leftalign&quot;&gt; 初期状態		&lt;/th&gt;&lt;td class=&quot;col2 leftalign&quot;&gt; primary   &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;     0    &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;     0     &lt;/td&gt;&lt;td class=&quot;col5&quot;&gt; secondary &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;     0    &lt;/td&gt;&lt;td class=&quot;col7 centeralign&quot;&gt;     0     &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt;1&lt;/th&gt;&lt;th class=&quot;col1 leftalign&quot;&gt; host-1 切断		&lt;/th&gt;&lt;td class=&quot;col2 leftalign&quot;&gt; primary   &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;     0    &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;     0     &lt;/td&gt;&lt;td class=&quot;col5&quot;&gt; secondary &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;     0    &lt;/td&gt;&lt;td class=&quot;col7 centeralign&quot;&gt;     0     &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt;2&lt;/th&gt;&lt;th class=&quot;col1 leftalign&quot;&gt; host-2 primary	&lt;/th&gt;&lt;td class=&quot;col2&quot;&gt; secondary &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;     1    &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;     0     &lt;/td&gt;&lt;td class=&quot;col5 leftalign&quot;&gt; primary   &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;     0    &lt;/td&gt;&lt;td class=&quot;col7 centeralign&quot;&gt;     0     &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt;3&lt;/th&gt;&lt;th class=&quot;col1 leftalign&quot;&gt; host-1 unmount	&lt;/th&gt;&lt;td class=&quot;col2&quot;&gt; secondary &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;     0    &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;     0     &lt;/td&gt;&lt;td class=&quot;col5 leftalign&quot;&gt; primary   &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;     0    &lt;/td&gt;&lt;td class=&quot;col7 centeralign&quot;&gt;     0     &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt;4&lt;/th&gt;&lt;th class=&quot;col1 leftalign&quot;&gt; host-2でfsck実行	&lt;/th&gt;&lt;td class=&quot;col2&quot;&gt; secondary &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;     0    &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;     0     &lt;/td&gt;&lt;td class=&quot;col5 leftalign&quot;&gt; primary   &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;     1    &lt;/td&gt;&lt;td class=&quot;col7 centeralign&quot;&gt;     0     &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt;5&lt;/th&gt;&lt;th class=&quot;col1 leftalign&quot;&gt; host-2 mount	&lt;/th&gt;&lt;td class=&quot;col2&quot;&gt; secondary &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;     0    &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;     0     &lt;/td&gt;&lt;td class=&quot;col5 leftalign&quot;&gt; primary   &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;     1    &lt;/td&gt;&lt;td class=&quot;col7 centeralign&quot;&gt;     0     &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row8&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt;6&lt;/th&gt;&lt;th class=&quot;col1 leftalign&quot;&gt; host-1 復帰		&lt;/th&gt;&lt;td class=&quot;col2&quot;&gt; secondary &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;     0    &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;     0     &lt;/td&gt;&lt;td class=&quot;col5 leftalign&quot;&gt; primary   &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;     0    &lt;/td&gt;&lt;td class=&quot;col7 centeralign&quot;&gt;     0     &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row9&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt;7&lt;/th&gt;&lt;th class=&quot;col1 leftalign&quot;&gt; 最後		&lt;/th&gt;&lt;td class=&quot;col2&quot;&gt; secondary &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;     0    &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;     0     &lt;/td&gt;&lt;td class=&quot;col5 leftalign&quot;&gt; primary   &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;     1    &lt;/td&gt;&lt;td class=&quot;col7 centeralign&quot;&gt;     0     &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table3&amp;quot;,&amp;quot;secid&amp;quot;:32,&amp;quot;range&amp;quot;:&amp;quot;33989-34872&amp;quot;} --&gt;
&lt;p&gt;
要するに、当初シナリオの2と3をひっくり返した。その結果、Split-Brainが発生しなくなった。
&lt;/p&gt;

&lt;p&gt;
というわけで、carp-hast-switchを書き換えて問題は解決した。(現在掲示しているcarp-hast-switchはこの問題を修正済みのものである)
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u6ce8\u610f\u70b9&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u6ce8\u610f\u70b9&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:8,&amp;quot;secid&amp;quot;:30,&amp;quot;range&amp;quot;:&amp;quot;31113-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Mon, 14 May 2018 04:31:22 +0000</pubDate>
        </item>
    </channel>
</rss>
