転載・引用について

ユーザ用ツール

サイト用ツール


os:freebsd:memo

差分

このページの2つのバージョン間の差分を表示します。


前のリビジョン
os:freebsd:memo [2024/05/12 02:10] (現在) – 外部編集 127.0.0.1
行 1: 行 1:
 +====== FreeBSD に関するメモ ======
  
 +===== ZFS =====
 +Root deviceにzfs を利用している場合、/boot/loader.confで''zfs_load="YES"''が必須になる。間違えてこれを削除してしまった場合、復旧が面倒になるので注意。
 +
 +  - FreeBSDのInstaller USB Memory を作成し、そこからboot
 +  - Installer画面が出たら、shellを起動
 +  - ''zpool import -R /mnt zroot'' と ''zfs mount''を実行する
 +  - viで /mnt/boot/loader.confを修正する
 +
 +===== WiFi =====
 +MS-01に載っている Mediatek MT7922 を Intel AX210NGW に換装したので、その設定を。
 +
 +なお、FreeBSD 14.0-RELEASEで試している。
 +
 +  * WiFi Deviceを確認する
 +    * ''sysctl net.wlan.devices'' を実行
 +    * 今回は、''net.wlan.devices: iwlwifi0'' が返ってきたので、WiFi Deviceは iwlwifi0
 +  * Network I/F を作成し、起動
 +    * ''ifconfig wlan0 create wlandev iwlwifi0 wlanmode sta country JP''
 +      * <code>
 +iwlwifi0: WRT: Invalid buffer destination
 +iwlwifi0: WFPM_UMAC_PD_NOTIFICATION: 0x20
 +iwlwifi0: WFPM_LMAC2_PD_NOTIFICATION: 0x1f
 +iwlwifi0: WFPM_AUTH_KEY_0: 0x90
 +iwlwifi0: CNVI_SCU_SEQ_DATA_DW9: 0x0
 +wlan0: Ethernet address: XX:XX:XX:XX:XX:XX
 +</code>
 +    * ''ifconfig wlan0 up''
 +  * WEP関係の設定を作成
 +    * ''wpa_passphrase SSID PASS > /etc/wpa_supplicant.conf''
 +    * ''chmod 600 /etc/wpa_supplicant.conf; chown root:wheel /etc/wpa_supplicant.conf''
 +  * Access Pointに接続
 +    * ''wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf''
 +      * Commandlineから実行した場合、以下のErrorが出るが、現時点では無視して良い
 +        * <code>
 +ioctl[SIOCS80211, op=20, val=0, arg_len=7]: Invalid argument
 +ioctl[SIOCS80211, op=20, val=0, arg_len=7]: Invalid argument
 +</code>
 +  * wlan I/Fを確認する
 +    * <code>
 +wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
 +        options=0
 +        ether XX:XX:XX:XX:XX:XX
 +        inet6 fe80::XXXX:XXXX:XXXX:XXXX%wlan0 prefixlen 64 scopeid 0x6
 +        groups: wlan
 +        ssid XXXXXXXXXXXXXXXX channel XX (XXXX MHz 11a) bssid XX:XX:XX:XX:XX:XX
 +        regdomain JAPAN country JP authmode WPA2/802.11i privacy ON
 +        deftxkey UNDEF AES-CCM 3:128-bit txpower 23 bmiss 7 mcastrate 6
 +        mgmtrate 6 scanvalid 60 wme roaming MANUAL
 +        parent interface: iwlwifi0
 +        media: IEEE 802.11 Wireless Ethernet OFDM/36Mbps mode 11a
 +        status: associated
 +        nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
 +</code>
 +  * DHCPで IP Addressを取得する
 +    * ''dhclient wlan0''
 +  * これで問題がなければ、以下永続化
 +  * /etc/rc.confに以下を追加
 +    * <code>
 +wlans_iwlwifi0="wlan0"
 +create_args_wlan0="wlanmode sta country JP"
 +ifconfig_wlan0="mode 11a WPA SYNCDHCP"
 +</code>
 +
 +===== DC-TCP =====
 +
 +FreeBSD 11.0以降では、TCPのCongestion Control機構としてDC-TCPが利用できる。
 +これを利用する設定をいかに記載しておく。
 +
 +なお、Install時の標準は、NewReno。
 +
 +  * 手動での切り替え
 +    * 以下を実行する<code>
 +# kldload cc_dctcp
 +# sysctl -w net.inet.tcp.cc.algorithm=dctcp
 +# sysctl -w net.inet.tcp.ecn.enable=1
 +</code>
 +    * ECNの確認(1 or 2であること) <code>
 +# sysctl net.inet.tcp.ecn.enable
 +1
 +</code>
 +      * 0: ECNを利用しない
 +      * 1: ECNを利用。送受信
 +      * 2: ECNを利用。受診時のみ
 +  * 永続化
 +    * ''/boot/loader.conf'' <code>
 +cc_dctcp_load="YES"
 +</code>
 +    * ''/etc/sysctl.conf'' <code>
 +net.inet.tcp.cc.algorithm=dctcp
 +net.inet.tcp.ecn.enable=1
 +</code>
 +
 +===== JournalしているUFSでfsckに失敗する =====
 +
 +起動時にこんなエラーがでた。
 +
 +<code>
 +# fsck -y /dev/ada0p1
 +** /dev/ada0p1
 +USE JOURNAL? yes 
 +** SU+J Recovering /dev/ada0p1
 +** Reading 33554432 byte journal from inode 5 
 +RECOVER? yes 
 +** Building recovery table. 
 +** Resolving unreferenced inode list. 
 +** Processing journal entries 
 +fsck_ufs: Directory 43643675 name not found 
 +
 +</code>
 +
 +これが出ると、fsckで復旧できない。
 +
 +このada0p1はJournalをenableにしており、/にmountしてあった。
 +
 +対処は
 +  - Single Userで起動
 +  - tunefs -j disable /dev/ada0p1
 +  - fsck -y /dev/ada0p1
 +  - mount / ; rm /.sujournal
 +  - RebootしてSingle Userで起動する
 +  - tunefs -j enable /dev/ada0p1
 +  - 再度reboot
 +
 +これで問題が解決した。
 +
 +===== FreeBSDにDiskを追加 =====
 +
 +作成したFreeBSD 11.0にHDDを追加した時に行う作業。
 +
 +さすがに //bsdlabel/disklabel// の時代でもあるまいということで、**GEOM** を使ってみる。
 +
 +  - まずは、 Disk をつなぐ
 +  - (必要に応じて ''reboot'' するなどして) 接続した Disk を認識させる
 +    * 今回は、仮に ''/dev/ada1'' としよう。
 +  - ''gpart show''を実行し、 ''ada1'' が見えているかを確認
 +    * <code>
 +# gpart show
 +=>      34  41942973  ada0  GPT  (20G)
 +        34      1024      freebsd-boot  (512K)
 +      1058  39844864      freebsd-ufs  (19G)
 +  39845922   2097084      freebsd-swap  (1.0G)
 +  41943006                - free -  (512B)
 +</code>
 +      * この時、まっさらであれば、 **GEOM** が Disk を認識していない。上記例でも、ada1は見えていない
 +      * XenServer で Disk を追加した時などでは、当然 ''ada1''は見えない
 +  - Disk Partition を作成する
 +    * ''gpart create -s GPT ada1'' を実行。''ada1 created''などと出力されればOK
 +    * <code>
 +# gpart show
 +=>      34  41942973  ada0  GPT  (20G)
 +        34      1024      freebsd-boot  (512K)
 +      1058  39844864      freebsd-ufs  (19G)
 +  39845922   2097084      freebsd-swap  (1.0G)
 +  41943006                - free -  (512B)
 +
 +=>       40  209715120  ada1  GPT  (100G)
 +         40  209715120        - free -  (100G)
 +</code>
 +    * 削除したい時には、''gpart destroy ada1'' などとすればよい
 +      * なお、 **destroy** する場合、 partition が存在して **はいけない**。事前に削除しておくこと
 +  - Partition を作成
 +    - ''gpart add -t freebsd-ufs ada1'' を実行すると、 Partition を確保する。
 +      * 上記のような指定をした場合、空き領域のうち、取得可能な最大領域を確保する。
 +      * <code>
 +# gpart show ada1
 +=>       40  209715120  ada1  GPT  (100G)
 +         40  209715120      freebsd-ufs  (100G)
 +</code>
 +      * 領域を指定したい場合、 **-b** で開始位置、 **-s** で領域のサイズが指定できる。
 +      * **-l** を利用してlabelをつけることもできる。labelは便利なので、付けておくことをお勧めする。
 +      * add する際に **-l** を指定しても良いが、後から追加する場合 ''gpart modify -i 1 -l update-data ada1'' などとする
 +        * この **-i** はindexであり、''gpart show'' した時の 左から3番目のフィールド(通常は1〜3程度だろう)の値を指定する
 +        * このindexの値が、すなわち Partition 番号であり ada0p2 である場合、p2 が Partition index 2 を示す
 +      * labelを見たい場合、''gpart show -l'' などとする
 +      * <code>
 +# gpart show -l
 +=>      34  41942973  ada0  GPT  (20G)
 +        34      1024      (null)  (512K)
 +      1058  39844864      (null)  (19G)
 +  39845922   2097084      (null)  (1.0G)
 +  41943006                - free -  (512B)
 +
 +=>       40  209715120  ada1  GPT  (100G)
 +         40  209715120      update-data  (100G)
 +</code>
 +      * Partition を削除したい場合、''gpart delete -i 1 ada1'' などとする
 +  - これで、Partition が作成できたので、newfsする
 +    * ''newfs -J -U /dev/ada1p1'' で、gjournal + soft-update を On にする
 +    * gjournal(-J) の代わりに soft-update journal(-j) を利用することもできるが、 GEOM を利用しているのだから gjournalを利用する
 +  - これで GEOM - UFS な Filesystem が出来上がったので、確認する。
 +    * ''tunefs -p /dev/ada1p1''などとする
 +    * <code>
 +# tunefs -p /dev/ada1p1
 +tunefs: POSIX.1e ACLs: (-a)                                disabled
 +tunefs: NFSv4 ACLs: (-N)                                   disabled
 +tunefs: MAC multilabel: (-l)                               disabled
 +tunefs: soft updates: (-n)                                 enabled
 +tunefs: soft update journaling: (-j)                       disabled
 +tunefs: gjournal: (-J)                                     enabled
 +tunefs: trim: (-t)                                         disabled
 +tunefs: maximum blocks per file in a cylinder group: (-e)  4096
 +tunefs: average file size: (-f)                            16384
 +tunefs: average number of files in a directory: (-s)       64
 +tunefs: minimum percentage of free space: (-m)             8%
 +tunefs: space to hold for metadata blocks: (-k)            6408
 +tunefs: optimization preference: (-o)                      time
 +tunefs: volume label: (-L)
 +</code>
 +  - 最後に、Filesystemをmountし、fstabに記載する。
 +===== OSの更新(Update/UpGrade) =====
 +  * [[http://www.freebsd.org/doc/ja/books/handbook/updating-upgrading-freebsdupdate.html]]
 +  * ''freebsd-update fetch''を実行して''freebsd-update install''するのが基本
 +  * 何か問題が出たら、''freebsd-update rollback''する
 +
 +===== rc関連の挙動 =====
 +FreeBSDの起動時処理を大雑把に言うと以下のとおり
 +  - initが上がる
 +  - rcが実行される
 +  - まず、rc.confに記載されている設定を基準に各種daemonを起動する
 +  - 次に、rc.conf.localに記載されている設定を基準に各種daemonを起動する
 +
 +各種daemonの起動には、/etc/rc.d 及び /usr/local/etc/rc.d に格納されている各種起動scriptを利用する。
 +最近のFreeBSD (おそらくFreeBSD 9.0以降) では、このscriptを呼び出すために、service コマンドが実装されている。起動時のscriptの実行順序を確認するには、service -eを実行すると良い
 +
 +このscriptは、自身が実行されるタイミングを記載することが可能。
 +  * ''# REQUIRE: foo bar'' このScriptはfoo,barが実行されたことを要求する
 +  * ''# BEFORE: foo bar'' このScriptはfoo,barが実行される前に実行されなければならない
 +
 +
 +従って、起動順序などを細かく考慮したい場合には、
 +  - とにかく早めに起動したい場合は/etc/rc.confに記載する
 +  - 後の方で起動したい場合には、/etc/rc.conf.localに記載する
 +  - 起動順序はScript内のREQUIRE/BEFOREを利用して制御する
 +必要がある。
os/freebsd/memo.1715447275.txt.gz · 最終更新: 2024/05/12 02:10 (外部編集)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki