os:freebsd:nas
差分
このページの2つのバージョン間の差分を表示します。
| — | os:freebsd:nas [2026/03/28 16:30] (現在) – 作成 - 外部編集 127.0.0.1 | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| + | ====== FreeBSDでNASを建てる ====== | ||
| + | |||
| + | FreeBSDでNASを作成する。 | ||
| + | |||
| + | Open Source なNASの実装には | ||
| + | * [[http:// | ||
| + | * [[https:// | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | などがある。 | ||
| + | |||
| + | (参考 : [[https:// | ||
| + | |||
| + | NASは、その利用目的によって、考慮するべき点が異なる。筆者の主要な用途としては | ||
| + | * 仮想基盤向けStorage | ||
| + | * 利用したいのは、iSCSI / NFS の2Protocol。CephもGlusterも興味はあるが、個人的にはまだ実験レベル。 | ||
| + | * ファイル共有用 | ||
| + | * 利用したいのはNFS(MacでFile共有するならNFSで十分)とAFP(TimeMachine) | ||
| + | の2種類である。 | ||
| + | |||
| + | しかし、仮想基盤向けストレージとファイル共有を同一のNASとして供給するのは、 | ||
| + | - 管理上面倒 | ||
| + | * インフラとユーザーではセキュリティポリシーが異なる | ||
| + | - サービス要求レベルが異なる | ||
| + | * インフラはできる限り安定して動かしたい。可能な限り触らない | ||
| + | * ファイル共有は、設定の変更やアカウント追加削除など、触る局面が多い | ||
| + | というように、そもそもの要求要件が異なる。 | ||
| + | |||
| + | というわけで、今回は、 | ||
| + | * 仮想基盤用のNASはFreeBSDを生でiSCSIとNFS供給用として使う | ||
| + | * ファイル共有用は、仮想基盤のVM上にNAS4Freeを投入して、設定の簡便化を図る | ||
| + | * NAS上のStorageにNASのStorageをおくわけで、屋上屋を架している状態だが、レスポンスがシビアではない条件なのでよしとする。 | ||
| + | という実装を行う。 | ||
| + | |||
| + | なお、NAS4Free環境の構築に関しては[[: | ||
| + | |||
| + | ===== 準備 ===== | ||
| + | NASを構築するには当然、十分なStorageを持つ機材が必要になる。 | ||
| + | |||
| + | まず、必要なスペックを検討する。 | ||
| + | |||
| + | ==== 要求要件検討 ==== | ||
| + | |||
| + | まず、要求要件をまとめる。 | ||
| + | * XCP-ngに対して、VM用のDisk Imageを保存することができるだけの容量 | ||
| + | * XCP-ngに対して、XCP-ngのSR(Storage Repository)として認識できるProtocolが利用できること | ||
| + | * 基盤環境がGbEネットワーク(100Base-T)で構築されているので、GbEで通信できる環境 | ||
| + | * なお、802.3adでのTrunkに対応したSwitching HUBを利用しているので、NICに余力があれば802.3adでのTrunkも考慮に入れる | ||
| + | * Disk Imageを保持するために、性能が良く、比較的安定なFileSystem(FS)を組めること | ||
| + | * サイズは小さくて良いので、Disk Imageを供給するためのNetwork File Systemを利用できること | ||
| + | |||
| + | | SR用 | NFS , iSCSI , Hardware HBA , Software FCoE | | ||
| + | | ISO File用 | NFS , SMB/CIFS | | ||
| + | |||
| + | 以上の条件であれば、Hardware要件さえ満たせれば、世に数多あるNAS Applianceを利用することで解決できる。 | ||
| + | が、今回は、生FreeBSD上でiSCSI/ | ||
| + | |||
| + | ==== 実装仕様 ==== | ||
| + | |||
| + | 手元の機材の関係上、以下の環境に実装する。 | ||
| + | |||
| + | | CPU | Intel Pentium G630T / 2.30GHz | 手元にあったので | | ||
| + | | Memory | 16GB | 手元にあったので | | ||
| + | | NIC | RealTek 8168 | MotherBoardにOnboardで載っているので | | ||
| + | | ::: | Intel PRO/1000 | PCI Slotに追加した | | ||
| + | | HDD | HDS728080PLA380 80G | 起動用 | | ||
| + | | ::: | WD Green WD20EARX 2T | ada0 / 手元にあったので | | ||
| + | | ::: | WD Green WD20EZRX 2T | ada1 / 手元にあったので | | ||
| + | | ::: | WD Green WD20EARX 2T | ada2 / 手元にあったので | | ||
| + | | ::: | WD Green WD20EZRX 2T | ada3 / 手元にあったので | | ||
| + | | ::: | WD Green WD20EZRX 2T | ada4 / 手元にあったので | | ||
| + | |||
| + | 要件と好みから、以下のように実装する | ||
| + | |||
| + | | OS | FreeBSD 11.1-RELEASE | | ||
| + | | iSCSI target | ctld (System Builtin) | | ||
| + | | NFS Server | rpcbind/ | ||
| + | | ::: | NFSv3を利用 | | ||
| + | | ZFS | RAID-Z2を利用 | | ||
| + | | ::: | SR用Storageはvdevにする | | ||
| + | |||
| + | その他、細かい諸元を以下に。 | ||
| + | * Remoteからの制御通信はsshのみを許可する。sshの待ち受けはHigh Portに移動する | ||
| + | * 管理セグメントとStorageセグメント以外からの通信は全て遮断する | ||
| + | * FreeBSD Updateおよびpkg updateは、手元にあるproxyを経由する | ||
| + | * 監視のためのSoftwareはとりあえずPendする | ||
| + | |||
| + | ===== OSの初期設定 ===== | ||
| + | Bare MetalにOSを投入する | ||
| + | |||
| + | ==== Install FreeBSD ==== | ||
| + | FreeBSDのInstaller CDからOSを導入する。 | ||
| + | |||
| + | 注意点は | ||
| + | * BootDiskにはそれほどの容量はいらない | ||
| + | * portsやsrcは展開しない | ||
| + | * 不要な32bit Libは導入しない | ||
| + | * Disk割り当ては、80Gだと少し大きすぎるので、以下のようにした。 | ||
| + | * Boot BlockにGPTを選択 | ||
| + | * OS部分は別にZFSにする必要がないので、UFSを利用する | ||
| + | * Partition構成は以下の通り | ||
| + | * efi: 512MB (40/ | ||
| + | * freebsd-ufs : 20G (10186/ | ||
| + | * freebsd-swap : 2G (42991656/ | ||
| + | * これらは、Installerから設定可能。重要なのは、**efi**を設定すること | ||
| + | あとは、普通にInstallすればよい。 | ||
| + | |||
| + | ==== Configuration of FreeBSD ==== | ||
| + | |||
| + | 最初にBootしたら、以下を行う。 | ||
| + | * **rc.conf**関連の設定 | ||
| + | - ''/ | ||
| + | * <code bash> | ||
| + | # Host Information | ||
| + | hostname=" | ||
| + | keymap=" | ||
| + | dumpdev=" | ||
| + | |||
| + | # System Configuration | ||
| + | clear_tmp_enable=" | ||
| + | zfs_enable=" | ||
| + | |||
| + | # NIC Configuration | ||
| + | ifconfig_re0=" | ||
| + | ifconfig_em1=" | ||
| + | |||
| + | # Routing Configuration | ||
| + | route_private10=" | ||
| + | route_private172=" | ||
| + | route_private192=" | ||
| + | |||
| + | static_routes=" | ||
| + | defaultrouter=" | ||
| + | |||
| + | #Network Parameters Configuration | ||
| + | icmp_bmcastecho=" | ||
| + | icmp_drop_redirect=" | ||
| + | icmp_log_redirect=" | ||
| + | ip6addrctl_enable=" | ||
| + | ip6addrctl_policy=" | ||
| + | ipv6_activate_all_interfaces=" | ||
| + | ipv6_network_interfaces=" | ||
| + | |||
| + | # NFS Configuration | ||
| + | rpc_lockd_enable=" | ||
| + | rpc_statd_enable=" | ||
| + | rpcbind_enable=" | ||
| + | |||
| + | nfs_client_enable=" | ||
| + | autofs_enable=" | ||
| + | |||
| + | mountd_enable=" | ||
| + | mountd_flags=" | ||
| + | nfs_server_enable=" | ||
| + | |||
| + | nfsv4_server_enable=" | ||
| + | nfsuserd_enable=" | ||
| + | nfsuserd_flags=" | ||
| + | |||
| + | # Firewall | ||
| + | pf_enable=" | ||
| + | pf_flags="" | ||
| + | pflog_enable=" | ||
| + | |||
| + | # Userland | ||
| + | syslogd_flags=" | ||
| + | sendmail_enable=" | ||
| + | sshd_enable=" | ||
| + | ntpd_enable=" | ||
| + | ntp_leapfile_fetch_verbose=" | ||
| + | ntp_leapfile_sources=" | ||
| + | </ | ||
| + | * ''/ | ||
| + | * / | ||
| + | * < | ||
| + | security.bsd.unprivileged_read_msgbuf=0 | ||
| + | kern.randompid=5055 | ||
| + | security.bsd.stack_guard_page=1 | ||
| + | |||
| + | # ZFS use 4k sectors. (default: 9/512 byes) | ||
| + | vfs.zfs.min_auto_ashift=12 | ||
| + | |||
| + | ### NFS parameters | ||
| + | vfs.nfsd.server_min_nfsvers=3 | ||
| + | </ | ||
| + | * 名前解決 | ||
| + | - ''/ | ||
| + | * < | ||
| + | domain management.example.org | ||
| + | nameserver 192.0.2.11 | ||
| + | nameserver 192.0.2.12 | ||
| + | </ | ||
| + | * **sshd**関連の設定 | ||
| + | - まず、自分のHome Directoryに'' | ||
| + | * これを忘れると、次の設定後にloginできなくなる | ||
| + | - ''/ | ||
| + | * < | ||
| + | ##### Addtional | ||
| + | Port XXXX | ||
| + | UseDNS no | ||
| + | ChallengeResponseAuthentication no | ||
| + | </ | ||
| + | * '' | ||
| + | * **ntpd**関連の設定 | ||
| + | - ''/ | ||
| + | * serverを正しく設定すれば良い | ||
| + | * 外部のNTPサーバーを参照するよりも、内部ネットワークに建ててあるNTPdを参照する方が望ましい | ||
| + | * <code bash ntp.conf> | ||
| + | tos minclock 3 maxclock 6 | ||
| + | server 192.0.2.1 iburst | ||
| + | server 192.0.2.2 iburst | ||
| + | server 192.0.2.3 iburst | ||
| + | |||
| + | restrict | ||
| + | restrict -6 default limited kod nomodify notrap noquery nopeer | ||
| + | |||
| + | restrict 127.0.0.1 | ||
| + | restrict -6 ::1 | ||
| + | |||
| + | leapfile "/ | ||
| + | </ | ||
| + | * Update関連の設定 | ||
| + | - freebsd-updateでOSを更新する際に参照するサーバーを設定する | ||
| + | * '' | ||
| + | * '' | ||
| + | * local-update-serverは内部のDNSで引けるupdateサーバーを記載すること | ||
| + | - pkgでpackageを更新する際に参照するサーバーを設定する | ||
| + | - '' | ||
| + | - '' | ||
| + | - <code bash FreeBSD.conf> | ||
| + | FreeBSD: { | ||
| + | url: " | ||
| + | mirror_type: | ||
| + | signature_type: | ||
| + | fingerprints: | ||
| + | enabled: yes | ||
| + | } | ||
| + | </ | ||
| + | * OSおよびPackageの更新 | ||
| + | - '' | ||
| + | - '' | ||
| + | - 再起動する | ||
| + | * 最小限のPackageを投入 | ||
| + | * 本システムに必要となる最小限のPackageをBinaryで投入する | ||
| + | * sudo | ||
| + | * '' | ||
| + | ===== (おまけ) CAM ===== | ||
| + | |||
| + | FreeBSDには、CAM(Common Access Method)という仕組みがあり、これでSATAのDiskに対して(Diskだけではないが)色々な処理を行える。 | ||
| + | この仕組みを使った様々な制御のために'' | ||
| + | |||
| + | たとえば、こんな感じ。 | ||
| + | |||
| + | <code bash> | ||
| + | # camcontrol devlist | ||
| + | <WDC WD20EARX-00PASB0 51.0AB51> | ||
| + | <WDC WD20EZRX-00DC0B0 80.00A80> | ||
| + | <WDC WD20EARX-00PASB0 51.0AB51> | ||
| + | <WDC WD20EZRX-00DC0B0 80.00A80> | ||
| + | <WDC WD20EZRX-00DC0B0 80.00A80> | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | <code bash> | ||
| + | # camcontrol identify ada5 | ||
| + | pass5: < | ||
| + | pass5: 150.000MB/s transfers (SATA 1.x, UDMA5, PIO 8192bytes) | ||
| + | |||
| + | protocol | ||
| + | device model HDS728080PLA380 | ||
| + | firmware revision | ||
| + | serial number | ||
| + | WWN | ||
| + | cylinders | ||
| + | heads 16 | ||
| + | sectors/ | ||
| + | sector size | ||
| + | LBA supported | ||
| + | LBA48 supported | ||
| + | PIO supported | ||
| + | DMA supported | ||
| + | |||
| + | Feature | ||
| + | read ahead | ||
| + | write cache yes yes | ||
| + | flush cache yes yes | ||
| + | overlap | ||
| + | Tagged Command Queuing (TCQ) no no | ||
| + | Native Command Queuing (NCQ) | ||
| + | NCQ Queue Management | ||
| + | NCQ Streaming | ||
| + | Receive & Send FPDMA Queued | ||
| + | SMART yes yes | ||
| + | microcode download | ||
| + | security | ||
| + | power management | ||
| + | advanced power management | ||
| + | automatic acoustic management | ||
| + | media status notification | ||
| + | power-up in Standby | ||
| + | write-read-verify | ||
| + | unload | ||
| + | general purpose logging | ||
| + | free-fall | ||
| + | Data Set Management (DSM/TRIM) no | ||
| + | Host Protected Area (HPA) yes no 160836480/ | ||
| + | HPA - Security | ||
| + | </ | ||
| + | |||
| + | で、本命はHDDの切り離し(未試験) | ||
| + | |||
| + | <WRAP round warning> | ||
| + | 以下正常動作していないので、試さないように | ||
| + | </ | ||
| + | |||
| + | * 参考URL | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * http:// | ||
| + | * http:// | ||
| + | * http:// | ||
| + | |||
| + | < | ||
| + | # camcontrol devlist -v | ||
| + | # zpool status zfstank | ||
| + | # camcontrol identify ada0 | ||
| + | → diskのシリアル番号確認 | ||
| + | # camcontrol eject ada0 | ||
| + | → 失敗(これは、試験したMBもシャシーもHotswap非対応なので当然) | ||
| + | # zpool offline zfstank gpt/ada0 | ||
| + | TEST時# gpart destroy -F ada0 | ||
| + | TEST時# zpool labelclear -f ada0 | ||
| + | TEST時# dd if=/ | ||
| + | # zpool status zfstank | ||
| + | # camcontrol stop ada0 | ||
| + | → 物理的に抜く | ||
| + | # camcontrol devlist | ||
| + | → Diskを挿す | ||
| + | # camcontrol rescan all | ||
| + | # camcontrol devlist | ||
| + | →Deviceが認識されていることを確認 | ||
| + | # gpart create -s gpt ada0 | ||
| + | # gpart add -a 4k -t freebsd-zfs -l ada0 ada0 | ||
| + | # zpool status zfstank | ||
| + | # zpool replace zfstank gpt/ada0 | ||
| + | # zpool status zfstank | ||
| + | </ | ||
| + | |||
| + | ===== NAS環境構築 ===== | ||
| + | |||
| + | NAS関連の作業を以下の順に実施する。 | ||
| + | |||
| + | - NAS公開用ZFS Pool/ | ||
| + | - iSCSI関連の設定とZvolの公開 | ||
| + | - NFS関連の設定とDirectoryの公開 | ||
| + | |||
| + | ==== ZFS関連設定 ==== | ||
| + | ZFS関連設定を記載する。 | ||
| + | |||
| + | 本構成の場合、ZFSに利用するHDDは、ada[0-4]の5台 | ||
| + | |||
| + | === ZFS poolを作成する === | ||
| + | - とにかくZFSのPoolを4Kセクタで作成するための準備 | ||
| + | * '' | ||
| + | * この設定を/ | ||
| + | - GPTでDiskを初期化する | ||
| + | * <code bash zfs_init.sh> | ||
| + | for i in 0 1 2 3 4; do | ||
| + | gpart destroy -F ada$i | ||
| + | gpart create -s gpt ada$i | ||
| + | gpart add -a 4k -t freebsd-zfs -l slot$i ada$i | ||
| + | done | ||
| + | </ | ||
| + | * なお、GPTが設定されていないHDDの場合、'' | ||
| + | - ZFS Poolを作成する | ||
| + | * atimeをOffに、圧縮アルゴリズムをLZ4に、Unicodeの (比較時) 正規化手法をNormalization Form D(NFD)に設定する | ||
| + | * < | ||
| + | zpool create -O atime=off -O compression=lz4 -O normalization=formD zfstank raidz2 gpt/slot0 gpt/slot1 gpt/slot2 gpt/slot3 gpt/slot4 | ||
| + | </ | ||
| + | |||
| + | <WRAP round tip> | ||
| + | zpool createコマンドは、ZFS Poolを作成するだけでなく、同時にpoolと同名のZFSファイルシステムを作成する。 | ||
| + | |||
| + | 本例で表示した atime/ | ||
| + | |||
| + | ZFS poolに対するOption Propertyは、-o(小文字)の後に指定することができる。詳細は '' | ||
| + | </ | ||
| + | |||
| + | <WRAP round tip> | ||
| + | 通常、ZFS RAIDz2を利用すると、RAID6相当のパリティーを持つ構成になるため、故障に対して比較的強固になる。 | ||
| + | 今回は採用しなかったが、さらに冗長性を高めることを考えるのであれば、'' | ||
| + | |||
| + | 当然、その分だけ性能は劣化するが、必要に応じて複製が確保されるので、堅牢性が上がる。 | ||
| + | </ | ||
| + | |||
| + | <WRAP round tip> | ||
| + | ZFS poolを作成する場合、それぞれのDiskに個別のLabel(GPT label)を作成しておくことが重要になる。 | ||
| + | |||
| + | 個別にLabelをつけておくことで、Disk故障などの理由でKernelがDiskを認識する順序が変化してしまった時に、故障したDiskを特定しやすくすることができる。 | ||
| + | |||
| + | 当然、HDDユニット自体にもラベル名を物理的に記入することが重要になる。 | ||
| + | </ | ||
| + | |||
| + | <WRAP round tip> | ||
| + | normalizationの設定をどのようにするべきかはさんざん悩んだが、ここでは、formDを選択する。 | ||
| + | なぜそうしたかは、以下のLinkを参照のこと。 | ||
| + | |||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | </ | ||
| + | === 確認作業 === | ||
| + | |||
| + | * 4k sectorであることの確認 | ||
| + | < | ||
| + | zdb -C zfstank | grep ashift | ||
| + | ashift: 12 | ||
| + | </ | ||
| + | |||
| + | * zpoolの状態確認 | ||
| + | < | ||
| + | # zpool list | ||
| + | NAME SIZE ALLOC | ||
| + | zfstank | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | # zpool status | ||
| + | pool: zfstank | ||
| + | | ||
| + | scan: none requested | ||
| + | config: | ||
| + | |||
| + | NAME STATE READ WRITE CKSUM | ||
| + | zfstank | ||
| + | raidz2-0 | ||
| + | gpt/ | ||
| + | gpt/ | ||
| + | gpt/ | ||
| + | gpt/ | ||
| + | gpt/ | ||
| + | |||
| + | errors: No known data errors | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | # zpool get -o all all zfstank | ||
| + | NAME | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | # zfs list | ||
| + | NAME USED AVAIL REFER MOUNTPOINT | ||
| + | zfstank | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | # zfs get all zfstank | ||
| + | NAME | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | zfstank | ||
| + | </ | ||
| + | |||
| + | <WRAP round tip> | ||
| + | gpartコマンドで状態を確認する | ||
| + | |||
| + | < | ||
| + | # gpart list -a | ||
| + | # gpart show -l # labelが表示される | ||
| + | # gpart show # partition tagが表示される | ||
| + | # gpart status # 現在の状態が表示される | ||
| + | </ | ||
| + | </ | ||
| + | === datasetとzvolを作成する === | ||
| + | * iSCSI用のzvolを作成 | ||
| + | * https:// | ||
| + | * http:// | ||
| + | < | ||
| + | zfs create -o volmode=dev -V 3T zfstank/ | ||
| + | </ | ||
| + | * NFS用のdatasetを作成 | ||
| + | < | ||
| + | zfs create zfstank/iso | ||
| + | # Mountpointを特に指定したい場合は、-o mountpoint を指定する | ||
| + | zfs create -o mountpoint=/ | ||
| + | </ | ||
| + | |||
| + | === 確認 === | ||
| + | < | ||
| + | # zfs list | ||
| + | NAME USED AVAIL REFER MOUNTPOINT | ||
| + | zfstank | ||
| + | zfstank/ | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | # zfs get all zfstank/ | ||
| + | NAME | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | # zfs list | ||
| + | NAME USED AVAIL REFER MOUNTPOINT | ||
| + | zfstank | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | # zfs get all zfstank/iso | ||
| + | NAME | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | zfstank/ | ||
| + | </ | ||
| + | |||
| + | <WRAP round tip> | ||
| + | * zvolの場合に、compressionがzfstankから引き継いでいることを確認 | ||
| + | * datasetの場合に、compression/ | ||
| + | </ | ||
| + | |||
| + | ==== iSCSI関連設定 ==== | ||
| + | |||
| + | iSCSI関係の設定を行う。 | ||
| + | |||
| + | 一昔前は、iSCSI targetになるためには、istgtコマンドを利用していた。 | ||
| + | istgtはUserlandのiSCSI taeget実装であり、NetBSDやMacOS-X Leopardでも動作したため散々お世話になったが、(安定していることもあって)現在ではほぼメンテナンスされていないことと、FreeBSDのDistributionにctldが含まれ、iSCSI targetとして動作させることが可能になったため、本稿ではctldを利用するものとする。 | ||
| + | |||
| + | 参考 | ||
| + | * https:// | ||
| + | * http:// | ||
| + | |||
| + | === 設定する === | ||
| + | |||
| + | - ''/ | ||
| + | * < | ||
| + | # | ||
| + | # ctl.conf : FreeBSD iSCSI target configuration | ||
| + | # | ||
| + | |||
| + | # iSCSI portal configuration | ||
| + | |||
| + | portal-group pg0 { | ||
| + | discovery-auth-group no-authentication | ||
| + | listen 198.51.100.254: | ||
| + | } | ||
| + | |||
| + | # iSCSI target configuration | ||
| + | target iqn.2018-05.org.example: | ||
| + | alias " | ||
| + | auth-group no-authentication | ||
| + | portal-group pg0 | ||
| + | |||
| + | lun 0 { | ||
| + | path / | ||
| + | blocksize 4096 | ||
| + | option vendor " | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | - '' | ||
| + | - ''/ | ||
| + | * '' | ||
| + | - '' | ||
| + | |||
| + | === 確認 === | ||
| + | 筆者の環境はmacOSなので、iSCSIの試験を行うには工夫が必要。 | ||
| + | |||
| + | [[https:// | ||
| + | を参考にmacOSに[[https:// | ||
| + | |||
| + | なお、Binaryは[[https:// | ||
| + | |||
| + | 以下、macOSからの確認 | ||
| + | <code bash> | ||
| + | # iscsictl add target iqn.2018-05.org.example: | ||
| + | The specified target has been added | ||
| + | # iscsictl list targets | ||
| + | iqn.2018-05.org.example: | ||
| + | 198.51.100.254 < | ||
| + | # iscsictl login iqn.2018-05.org.example: | ||
| + | Attached iqn.2018-05.org.example: | ||
| + | FreeBSD CTLDISK 0001 | ||
| + | Serial Number MYSERIAL | ||
| + | lun 0: type 0x00 (Block device) | ||
| + | # iscsictl list targets | ||
| + | iqn.2018-05.org.example: | ||
| + | 198.51.100.254 <active, cid 0, port 3260, interface default> | ||
| + | # iscsictl list luns | ||
| + | iqn.2018-05.org.example: | ||
| + | FreeBSD CTLDISK 0001 | ||
| + | Serial Number MYSERIAL | ||
| + | lun 0: type 0x00 (Block device) | ||
| + | disk2: 3.3 TB (805306368 4096 byte blocks) | ||
| + | # iscsictl logout iqn.2018-05.org.example: | ||
| + | Detached iqn.2018-05.org.seirios.dsk: | ||
| + | # iscsictl remove target iqn.2018-05.org.example: | ||
| + | The specified portal has been removed | ||
| + | # | ||
| + | </ | ||
| + | ==== NFS関連設定 ==== | ||
| + | |||
| + | * rc.conf内で、以下の設定が有効になっていることを確認 | ||
| + | * NFSv2およびNFSv4は利用しない | ||
| + | * NFS Clientにはならない | ||
| + | * XCP-ngはLinuxなので、Linuxに合わせた設定を行う必要がある | ||
| + | * RPC関連の挙動が異なったりするので、RCP関連のDaemonは必須 | ||
| + | * < | ||
| + | # NFS Configuration | ||
| + | rpc_lockd_enable=" | ||
| + | rpc_statd_enable=" | ||
| + | rpcbind_enable=" | ||
| + | |||
| + | nfs_client_enable=" | ||
| + | autofs_enable=" | ||
| + | |||
| + | mountd_enable=" | ||
| + | mountd_flags=" | ||
| + | nfs_server_enable=" | ||
| + | |||
| + | nfsv4_server_enable=" | ||
| + | nfsuserd_enable=" | ||
| + | nfsuserd_flags=" | ||
| + | </ | ||
| + | * NFSで公開するDirectoryを指定する | ||
| + | * 昔から、maproot関連は色々鬼門なので、気になる人は節末のコラムを参照のこと | ||
| + | * <code - exports> | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | === 確認 === | ||
| + | ; '' | ||
| + | ; '' | ||
| + | |||
| + | <WRAP round tip> | ||
| + | mountdの再起動には、HUP Signalを送れば良い。 | ||
| + | |||
| + | ''/ | ||
| + | を実行すると良い。 | ||
| + | </ | ||
| + | |||
| + | <WRAP round warning> | ||
| + | exportsに記載するオプションとして、**maproot**がある。 | ||
| + | |||
| + | NFSで供給されているファイルシステムに対してrootユーザーが書き込みを行う場合、通常であれば、ファイルのオーナーはrootになるはずである。しかし、これは、ファイルシステムを供給している**NFSサーバー**および同一のファイルシステムを共有している**他のNFS Client**が、そのファイルのオーナーを'' | ||
| + | |||
| + | 書き込まれたファイルが一般ファイルであれば多くの場合は問題にならないが、実行ファイルであった場合には脆弱性を生む元凶となる場合がある。 | ||
| + | |||
| + | ; 例1 : ShellなどのScriptを実行可能にしておくと、多くのシステムでその実行ファイルを実行することが可能 | ||
| + | ; 例2 : 実行ファイルにSUID Bitを立てておくと何が起こるか感がて見てください | ||
| + | |||
| + | そのため、特にroot userが書き込む場合にのみ、Fileのオーナーを別のUIDに割り当てる機能がmaprootである。 | ||
| + | |||
| + | 例えば'' | ||
| + | </ | ||
| + | |||
| + | ====== 落ち穂拾い ====== | ||
| + | |||
| + | <WRAP round tip> | ||
| + | ''/ | ||
| + | |||
| + | * '' | ||
| + | * 参考: [[http:// | ||
| + | </ | ||
| + | |||
| + | <WRAP round tip> | ||
| + | TimeMachineバックアップに使う場合 | ||
| + | |||
| + | TimeMachine用、DVD鑑賞用、写真バックアップ用のパーティションを afp で見えるようにすればよい。 | ||
| + | |||
| + | MacのFinderの接続あたりから '' | ||
| + | |||
| + | * netatalk3を入れる | ||
| + | * '' | ||
| + | * 参考 | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | |||
| + | これでMacOSからも見れるようになる。 | ||
| + | |||
| + | </ | ||
| + | |||
| + | <WRAP round tip> | ||
| + | 参考 | ||
| + | * [[https:// | ||
| + | </ | ||
os/freebsd/nas.1774682729.txt.gz · 最終更新: (外部編集)
