2.5. Hotate Formatter

Hotate Formatter は端末の内蔵ディスクのディスクフォーマットを実行し、端末の内蔵ディスクの EFI パーティションに「ほたてフルキャッシュ オフラインブート用モジュール」を配置します。

注意

一部の端末において、EFI パーテイションにオフラインモジュールがある場合に、ブートオーダーの順序とは関係なく内蔵ディスクから起動しようとすることがあります。 このような場合、内蔵ディスクからの起動のタイムアウトを待つことになり、ネットブート起動する端末の起動に時間がかかる可能性があります。

この問題を回避するには、後述する 端末構成情報ファイル において、ディスクのフォーマットのみ実施するように変更してください。

2.5.1. Hotate Formatter の起動方法

Hotate Formatterは以下の2つの方法で起動できます。

  • ほたてへの新規端末登録
  • CO-Booter 管理者メニューからの起動

2.5.2. Hotate Formatter の使い方

メモ

本章ではデフォルト設定(端末構成情報ファイルが default.xml)での動作について説明します。

端末構成情報ファイルの設定によっては、ユーザーの選択がスキップされ、自動的に設定された項目が実行されます。

HotateFormatter の起動

  1. 端末をネットブートで起動します。
  2. ブートメニューが表示されるので、HotateFormatter を選択します。
  3. HotateFormatter が起動するのを待ちます。

HotateFormatter が起動すると下記の様なメッセージが表示されます

=============================================
        Hotate Formatter        by CO-CONV
=============================================
                            (build 20220131)

Caution: device will be formatted.
Connecting to HotateFormatter Server
              target_ip: 192.168.10.11, target_port:  30805

Sending Partition Information requests to server ….
  … waiting …
Received Partition Information response from server ….
    onFinish:  Reboot
    confirmRequired:   Yes
   defaultAction: 3

実行する処理の選択

デフォルト設定では、端末の内蔵ディスクのディスクフォーマットと、 端末内蔵ディスクのEFIパーティションへのほたてフルキャッシュオフラインブート用モジュールの配置を行います。

=============================================
Which work do you want ? (default:3)
  1:  Format Internal drive
  2:  Execute addtional commands
  3:  Both
>>>
action:  3
f_format: True
f_command:  True

メモ

端末構成情報ファイルの DefaultAction の設定によって表示が異なります。

内蔵ディスクのディスクフォーマットの実行

メモ

端末構成情報ファイルの DefaultAction の設定によっては実行されません。

フォーマット対象のディスク名とパーティション構成が表示されます。 「All data in /dev/nvme0n1 will be lost, Proceed? (Y/n)」と確認されるので、 問題なければ 「Y」を入力してエンターを押します。

============
Following drive(s) are being formatted:  /dev/nvme0n1

---

disk:   /dev/nvme0n1
Drive size:   119 GB
partitionExt:   "p"
partition1:   fs:  EFI,  size:  1024 MB
partition2:   fs:  msr,  size:  128 MB
partition3:   fs:  NTFS,  size:  40960 MB
partition4:   fs:  HOTATE,  size:  * MB
All data in /dev/nvme0n1 will be lost, Proceed? (Y/n)

メモ

端末構成情報ファイルで ConfirmRequired を No に設定している場合には確認されません。

ディスクフォーマットが実行されます。

1:  Cleaning disk
>>  Cleaning Header
>>  Cleaning Footer

2:  Cleaning Partition
########################################
  Stdeer
~省略~
########################################

3:  Formatting Partitions
    >>  Formatting Partiton:  mkfs -t vfat -F 32 -v /dev/nvme0n11
########################################
  Stdeer
~省略~

########################################
    >>  Formatting Partiton:  mkfs -t ntfs -Q /v /dev/nvme0n13
    >>  Formatting Partiton:  dd if=/dev/zero of=/dev/nvme0n14 count=1
########################################
  Stdeer
~省略~

########################################

Done.
============

オフラインブート用モジュールの配置

HFExtra から実行されるスクリプトにより、端末の内蔵ディスクの EFI パーティションに「ほたてフルキャッシュ オフラインブート用モジュール」が配置されます。 オフラインブートに必要なモジュールの内、拡張子が .efi のファイルはほたての tftp サーバーから取得されます。

メモ

端末構成情報ファイルの DefaultAction の設定によっては HFextra は実行されません。

Extract /tmp/HFextra.tgz
Exec /tmp/HFextra/init.sh
########################################
    Stderr
CO-BooterSecure.efi  100%  |*************************]
CO-BooterSecure.efi  100%  |*************************]

CO-BooterMenu.efi  100% |*************************]
CO-BooterMenu.efi  100% |*************************]

CO-Booter.efi       100% |*************************]
CO-Booter.efi       100% |*************************]

HotateNbp.efi        100%  |*************************]
HotateNbp.efi        100% |*************************]

########################################

Done.

10秒後に再起動されます。

メモ

端末構成情報ファイルの DefaultActionOnFinish の設定によって動作が異なります。

Hotate Formatter:  Success!   Reboot in 10 seconds.

2.5.3. 複数の内蔵ディスクをフォーマットする場合

内蔵ディスクが複数あり、端末構成情報ファイルでそれぞれのディスクに対する設定を記述している端末の場合には、Hotate Formatterの起動時にどのディスクをフォーマットするかという確認のメッセージが表示されます。

フォーマットするディスクデバイス名( /dev/xxxx )の先頭にある「番号」を入力、もしくは表示された全てのディスクを対象とする a を入力して、エンターを押します。

=============================================
        Hotate Formatter        by CO-CONV
=============================================
                              (build 20220131)


Connecting to HotateFormatter Server
              target_ip: 192.168.10.11, target_port:  30805

Sending Partition Information requests to server ….
  … waiting …
Received Partition Information response from server ….
    onFinish:  Reboot
    confirmRequired:   Yes
Multiple drivers are found. (2 drives)
1) /dev/nvme0n1
2) /dev/sda
Select a drive or type “a” for all drives (1-2) or All(a)

それ以降の動作は、ディスクが1つの場合と同様です。 パーテイション構成の確認が表示されるので、問題がなければ Y を入力しエンター押してフォーマットをします。

2.5.4. 端末構成情報ファイル

端末構成情報ファイルは、HotateFormatter 実行時にどのような処理を行うかや、端末の内蔵ディスクのパーティション構成を記述したXML形式のファイルです。

端末構成情報ファイルは、サーバー側の C:\ProgramData\CO-CONV\HotateFormatter\HostInfo フォルダ内に配置されています。

端末構成情報ファイルは複数用意しておくことができます。 どの端末構成ファイルを使用するのかは、 C:\ProgramData\CO-CONV\HotateFormatter\HostInfoSelection.txt の設定によって決まります。

メモ

CO-Navi を使用してほたてサーバーをインストールした場合には、 default.xml が使用されるように設定されます。

端末構成情報ファイルの設定例

以下に、 端末構成情報ファイルの設定例の一部を記載します。 各設定項目の説明については後述する 各種パラメータの説明 をご参照ください。

<?xml version="1.0" encoding="UTF-8"?>
<HotateFormatter>
  <Response method="GetHostConfiguration">
  <Status>OK</Status>
  <Configuration>
    <!-- どの処理を実行するか?                                -->
    <!--  (0..Wait, 1..Format, 2..Script, 3..Both) のいずれか -->
    <DefaultAction>3</DefaultAction>

    <!-- 処理完了時にどうするか                                -->
    <!--    (Shutdown/Reboot/None) のいずれか            -->
    <DefaultActionOnFinish>Reboot</DefaultActionOnFinish>

    <!-- フォーマット実行直前にユーザに確認をいれるかどうか   -->
    <!--   "No" にすると、ユーザに問い合わせをすることなく       -->
    <!--   内蔵ドライブをフォーマットするのでご注意ください。 -->
    <ConfirmRequired>Yes</ConfirmRequired>

    <!-- パーティション毎のサイズとファイルシステムを指定する -->
    <!--   利用できるファイルシステム:                           -->
    <!--    NTFS, FAT32, EFI, MSR                           -->
    <!--    EXT3, EXT4, SWAP                                -->
    <!--    HOTATE, RC                                      -->
    <!--    GUID を直接記載することもできます。            -->
    <!--    (例) "514DCD5B-7899-45C9-88BB-8AF78FC12908"  -->
    <!--   size:                                              -->
    <!--      パーティションのサイズを MB 単位で指定します。  -->
    <!--   block:                                             -->
    <!--      ブロックサイズ (2MB または 64KB)。Hotate のみ。 -->
    <Disk device="/dev/sda">
      <PartitionExt></PartitionExt>
      <NTSignature>0x1234ABCD</NTSignature>
      <PrimaryPartition1 size="1024" fs="EFI" />
      <PrimaryPartition2 size="128" fs="MSR" />
      <PrimaryPartition3 size="40960" fs="NTFS" />
      <PrimaryPartition4 size="*" fs="Hotate" />
    </Disk>
    <Disk device="/dev/nvme0n1">
      <PartitionExt>p</PartitionExt>
      <NTSignature>0x1234ABCD</NTSignature>
      <PrimaryPartition1 size="1024" fs="EFI" />
      <PrimaryPartition2 size="128" fs="MSR" />
      <PrimaryPartition3 size="40960" fs="NTFS" />
      <PrimaryPartition4 size="*" fs="Hotate" />
    </Disk>
  </Configuration>
  </Response>
</HotateFormatter>

各種パラメータの説明

Default Action

HotateFormatter で起動した際に、どのような処理を実行するかを指定します。Default Action 要素は最大1つ記述できます。

0:HotateFormatter で起動した際にどの処理を実行するかをユーザー入力で指定します。
1:HotateFormatter で起動した際に端末の内蔵ディスクのフォーマットのみを実行します。
2:HotateFormatter で起動した際に、HFextra の処理のみを実行します。 端末の内蔵ディスクのEFIパーティションに、オフラインブート用モジュールのコピーのみを行う場合に使用します。
3:HotateFormatter で起動した際に、1と2の両方を実行します。

DefaultActionOnFinish

クライアント処理完了時の動作を指定します。DefaultActionOnFinish 要素は最大1つ記述できます。

Shutdown:シャットダウンします。
Reboot:再起動します。DefaultActionOnFinish 要素省略時のデフォルト値です。
None:シャットダウンや再起動を行いません。

ConfirmRequired

端末内蔵ディスクのフォーマット実行直前に、ユーザーに確認を入れるかを指定します。ConfirmRequired 要素は最大1つ記述できます。

Yes:ユーザーに確認を入れます。
No:確認を入れません。

Disk

default.xml を参考に XML 形式で設定を記述してください。 また、その際ファイルを保存する文字コードと XML で指定している charset が合っているか気をつけてください。 Disk 要素は任意の個数を記述できます。 パーティション構成を変更しない場合は省略できます。

要素名 説明
Disk

端末にセットされているディスクの数だけ <Configuration> 要素の子要素として挿入します。

デバイス名は、通常 SATA ディスクの場合には /dev/sda 、NVMe ディスクの場合には /dev/nvme0n1 を指定します。 複数台のディスクが接続されている場合には、複数の Disk 要素を 作成し、それぞれのデバイス名に /dev/sdb, /dev/sdc, /dev/nvme1n1 ... と指定することになります。

PartitionExt デバイス名からパーティション名を作成する際、パーティション番号の数字の手前に追加すべき文字列を指定します。 例えば、NVMe デバイスの場合には、デバイス名が /dev/nvme0n1 、パーティション名が /dev/nvme0n1p1 といった パスとなりますが、この場合には <PartitionExt>p</PartitionExt> と指定します。
NTSignature

MBR の 440~443 バイトに記述するディスク シグネチャ (4 バイト) を指定します。 CD,AB,34,12 ないしは 0xCD, AB, 34, 0x12 のように記述します。

コンマ区切りで 4 バイトを指定してください。各項目は 0x の有無にかかわらず 16 進数として解釈されます。 0x1234ABCD のように 32bit を一括して指定するとMBR に対して 0xCD, 0xAB, 0x34, 0x12 のような順序で書き込まれます。

PrimaryPartition

この要素で指定された構成でディスクのパーティションが作成されます。 PrimaryPartition1, PrimaryPartition2 … のように最大 4 つまで指定できます。

各パーティションには sizefs の属性があります。

size:

パーティションのサイズを MB 単位で指定します。 最後に作成するパーティションについては、 size="*" と指定すると、未指定領域の全てが割り当てられます。 例えば 150GB のディスクに対して、 PrimaryPartition1size="102400" として、 PrimaryPartition2size="*" として作成した場合、100GB のパーティションと残り 50GBのパーティションが作成されます。

fs:

パーティションの種類を指定します。 次のうちのいずれかの文字列を選択するか、パーティション ID を fs="C12A7328-F81F-11D2-BA4B-00A0C93EC93B" のように UUID で直接指定してください。 パーティションID を UUID で指定した場合はフォーマット処理は実行されません。

対応するファイルシステム: FAT32, NTFS, EXT3, EXT4, SWAP, EFI, MSR, Hotate (ほたて用キャッシュパーティション)

block:

ほたてキャッシュパーティションのブロックサイズを指定します (HotateFormatter バージョン 2023.8.1.3 以降、かつ、 fsHotate のときのみ)。 ブロックサイズは block="2MB" (デフォルト) または block="64KB" のいずれかが利用できます。

64KB は、CO-Colors ほたて 2023年8月版 (Updated 2024/7/3) 以降のサーバー環境・Windows 環境でのみ利用できます。 64KB が指定されると、対応していないバージョンのクライアントが導入されているイメージは起動できなくなる点にご注意ください。

端末に内蔵ディスクが複数ある場合

端末構成情報ファイルにそれぞれのディスク用の <Disk device=""></Disk> を記述しておくことで、それぞれのディスクに応じたパーティション構成を適用できます。

2.5.5. FAQ

端末からHotate Formatterを実行したとき

  • HotateFormatter を再実行したい

    プロンプトに sudo python3 /opt/co-conv/HotateFormatter.py を入力して実行してください。 再度、HotateFormatter の処理が開始されます。

  • ログの確認がしたい

    /tmp/hf_start.sh.log がログファイルです。

    サーバー側のログファイルは C:\ProgramData\CO-CONV\HotateFormatter\log にあります。合わせてご確認ください。

  • HotateFormatter.py が開始されない

    can’t open file ‘/opt/co-conv/HotateFormatter.py というエラーが表示されて HotateFormatter が開始されない場合、以下の可能性があります。

    • HFbinary.tgzHFconfig.txt が取得できていない

      • /tmp/ に上記ファイルが存在するか
      • 何のファイルを取得しようとしたか ( /tmp/hf_start.sh.log にログが残っています)
      • tftp のフォルダーに対象のファイルが存在しているか

      などを確認してください。

    • 端末の内蔵 NIC が見えていない

      ip a コマンドを実行して端末の内蔵 NIC が認識されているかを確認してください。

      注意

      端末の内蔵 NIC を認識していない場合は、下記の情報を取得してご連絡ください。

      • 最新の Ubuntu で起動して端末の内蔵 NIC が見えるかどうか

        USB インストーラーなどで起動してご確認ください(インストールする必要はありません)

      • Ubuntu で起動した状態で lspci -nn -vv を実行した結果

  • HotateFormatter サーバーとの接続に失敗する

    ============================================================
        Error:  No Response from Server ( XXX.XXX.XXX.XXX:30805 )
    ============================================================
    

    というエラーが表示され、HotateFormatter サーバーとの接続に失敗している場合、

    • HotateFormatterサービスは動作しているか
    • サービスの動作している IP アドレス、ポートに送っているか
    • ファイアウォール設定

    などを確認してください。

  • 端末構成情報ファイルの取得処理で失敗する

    Sending Partition Information request to server …
    ...Waiting…
    Received Partition Information response from server …
    Traceback ( most recent call last):
      File “/opt/co-conv/HotateFormatter.py”, line 298, in <module>
            outFile (response_xml_path, XMLtoString(resXML))
      File “/opt/co-conv/HotateFormatter.py”, line 26, in outFile
            f.write(s)
    UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position
    

    上記のエラーで終了した場合、 端末構成情報ファイルの取得に失敗しています。 サーバー側の C:\ProgramData\CO-CONV\HotateFormatter\log 以下のログをご確認ください。 端末がどの端末構成情報ファイルを取得しようとしていたかなどがわかります。

    ============================================================
        Error:  Server returns an error massage (check /tmp/hf_response.txt)
    ============================================================
    Traceback (most recent call last):
        File “/opt/co-conv/HotateFormatter.py”, line 352, in <module>
          raise Exception(“Server Return an error”)
    Exception: Server returns an error
    

    上記のエラーが表示された場合は、まず /tmp/hf_response.txt を確認してください。 特に何もわからない場合は、サーバー側の C:\ProgramData\CO-CONV\HotateFormatter\log 以下のログを確認してください。

  • 端末構成情報ファイルを取得後に No drive found. でエラー終了する

    Received Partition Information response from server …
      onFinish: Reboot
        confirmRequired:  Yes
    
    ==========================
        Error:  No drive found.
    ==========================
    
    Traceback (most recent call last):
        File “/opt/co-conv/Hotateformatter.py”, line 325, in <module>
          raise Exception (“Error: No drive found.”)
    Exception:  Error:  No drive found.
    

    端末構成情報ファイルの Disk device="" に設定しているデバイス名に一致していない場合に起こるエラーです。 設定を見直してください。