Raspios Arm 64によるラズベリーパイ3 B + ISCSIブート



Raspios 64ビットは最近行ったGA そして、私は最近私のラズベリーパイ3 B +とラズベリーパイゼロ2 Wデバイスで見つかりました.
今すぐディスクレスブートを再訪する素晴らしい時間のように感じている.
これは私が使っているものです.
  • のためのUniFi
  • TFTPとISCSIのためのQNAP NAS
  • ラズベリーパイ3 B +

  • 64ビットインストール
    用途rpi-imager そして、64ビットRaspiosのGAバージョンをインストールしてください!

    ブートモードを有効にする
    私が持っているデバイスは4 - 6歳です.私は新しいものが既にこのセットを持っているかどうかわからない.
    このコマンドを実行します.
    vcgencmd otp_dump | grep 17:
    
    これは私のOTPダンプがUSBRACKブートモードを有効にする前に見えたものです.
    17:1020000a
    
    出力がこのように見えるなら、最新のファームウェアを入手してください.
    sudo rpi-update
    
    私は少し心配していたrpi-update , しかし、私はまた、私自身のメモに従います.
     *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
     *** Performing self-update
     *** Relaunching after update
     *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
     *** We're running for the first time
     *** Backing up files (this will take a few minutes)
     *** Backing up firmware
     *** Backing up modules 5.10.63-v8+
    #############################################################
    WARNING: This update bumps to rpi-5.15.y linux tree
    See: https://forums.raspberrypi.com/viewtopic.php?t=322879
    
    'rpi-update' should only be used if there is a specific
    reason to do so - for example, a request by a Raspberry Pi
    engineer or if you want to help the testing effort
    and are comfortable with restoring if there are regressions.
    
    DO NOT use 'rpi-update' as part of a regular update process.
    ##############################################################
    Would you like to proceed? (y/N)
     *** Downloading specific firmware revision (this will take a few minutes)
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100   173  100   173    0     0    678      0 --:--:-- --:--:-- --:--:--   678
    100  123M    0  123M    0     0  4052k      0 --:--:--  0:00:31 --:--:-- 3014k
     *** Updating firmware
     *** Updating kernel modules
     *** depmod 5.15.21-v8+
     *** depmod 5.15.21-v7+
     *** depmod 5.15.21-v7l+
     *** depmod 5.15.21+
     *** Updating VideoCore libraries
     *** Using SoftFP libraries
     *** Updating SDK
     *** Running ldconfig
     *** Storing current firmware revision
     *** Deleting downloaded files
     *** Syncing changes to disk
     *** If no errors appeared, your firmware was successfully updated to fbcab73d5a20f592aa9f6b0e364757ef131dae27
     *** A reboot is needed to activate the new firmware
    
    からの再起動後rpi-update 私たちはまだUSBRANTブートモードを有効にする必要があります.
    この行を/boot/config.txt それは問題ではないが、独自の行が必要です.私はそれを頂上に置きました.
    program_usb_boot_mode=1
    
    その後、再びデバイスを再起動します.さて、OTPダンプは次のようになります.
    17:3020000a
    
    OTPダンプが設定されているので、program_usb_boot_mode=1 ライン/boot/config.txt ファイル.再起動する必要はありませんが、行を削除して再起動すると、OTPダンプにはまだUSBRANTブートモードが有効になっていることがわかります.

    ( iSCSIモジュールをinitramfsツールで有効にする)
    これらは私が撮ったステップです.
    # Update repositories
    sudo apt update
    # Install available upgrades
    sudo apt upgrade -y
    # Install open-iscsi
    sudo apt install open-iscsi
    # Start open-iscsi to create the configs that we will use later
    sudo systemctl start open-iscsi
    # Create initramfs flag file for the iscsi module
    sudo touch /etc/iscsi/iscsi.initramfs
    # Create a new initramfs image that includes the iscsi module from the current kernel
    sudo update-initramfs -v -k `uname -r` -c
    
    これで、initrd.img あなたの/boot ディレクトリ.
    ls -latr /boot/initrd.img*
    
    出力は次のようになります.
    -rwxr-xr-x 1 root root 10487750 Feb 11 10:59 /boot/initrd.img-5.15.21-v8+
    
    我々は、この新しいを参照しますinitrd.img 後でファイル!

    DFTPサーバへのTFTPオプションの追加
    この時点で、デバイス上のブートローダは、ネットワークブートを受け入れるでしょう.
    TFTPサーバを指すようにDHCPサーバを設定します.DHCPプロトコルOption 66 TFTPサーバ用.基本的には、あなたのDHCPクライアント(Raspberry PI 3 b +)をどのサーバーに次の接続を指示し、さらに指示を取得します.

    TFTPサーバ
    raspberry pi 3 b +のネットワークブートプロセスはpxeのようです.したがって、少しカスタムセットアップが必要です.これは、予め知られている装置のシリアル番号を必要とする.
    デバイスのシリアル番号を取得します.
    grep Serial /proc/cpuinfo
    
    私の場合は以下のようになります.
    Serial      : 000000002edd5668
    
    TFTPサーバーで、デバイスのディレクトリを作成します.私のqnapサーバの場合、tftp rootは/share/tftp でも変数を使いますTFTP_ROOT .
    # Set the implementation specific TFTP_ROOT
    export TFTP_ROOT=/share/tftp
    # Create directory using the device serial number, without leading 0s
    sudo mkdir $TFTP_ROOT/2edd5668
    
    さて、TFTPサーバから/boot 新しいカーネルを含むラズベリーパイのパーティション.
    sudo scp -r pi@2edd5668:/boot/* $TFTP_ROOT/2edd5668/
    
    作業をチェックしたい場合、ディレクトリは次のようになります.
    COPYING.linux*            bcm2708-rpi-cm.dtb*       bcm2710-rpi-3-b-plus.dtb* bcm2711-rpi-4-b.dtb*      cmdline.txt*              fixup4db.dat*             initrd.img-5.15.21-v8+*   kernel8.img*              start4db.elf*
    LICENCE.broadcom*         bcm2708-rpi-zero-w.dtb*   bcm2710-rpi-3-b.dtb*      bcm2711-rpi-400.dtb*      config.txt*               fixup4x.dat*              issue.txt*                overlays/                 start4x.elf*
    bcm2708-rpi-b-plus.dtb*   bcm2708-rpi-zero.dtb*     bcm2710-rpi-cm3.dtb*      bcm2711-rpi-cm4.dtb*      fixup.dat*                fixup_cd.dat*             kernel.img*               start.elf*                start_cd.elf*
    bcm2708-rpi-b-rev1.dtb*   bcm2709-rpi-2-b.dtb*      bcm2710-rpi-zero-2-w.dtb* bcm2711-rpi-cm4s.dtb*     fixup4.dat*               fixup_db.dat*             kernel7.img*              start4.elf*               start_db.elf*
    bcm2708-rpi-b.dtb*        bcm2710-rpi-2-b.dtb*      bcm2710-rpi-zero-2.dtb*   bootcode.bin*             fixup4cd.dat*             fixup_x.dat*              kernel7l.img*             start4cd.elf*             start_x.elf*
    
    今、これはPXEのようなので、我々はコピーする必要がありますbootcode.binTFTP_ROOT
    sudo cp $TFTP_ROOT/2edd5668/bootcode.bin $TFTP_ROOT/
    
    この時点で、SDカードがインストールされなくても、ラズベリーパイ3 B +は以下の通りです.
  • DHCPサーバにIPアドレスを尋ねてください
  • 我々のDHCPサーバはIPアドレスを提供して、より多くの情報のためにTFTPサーバを訪問するために装置に話します
  • 私たちのデバイスはtftpのroot/bootcodeのためのTFTPサーバを要求します.ビン
  • 私たちのデバイスは$ tftpounds root/2 edd 5668から起動します.
  • この時点で$TFTP_ROOT/2edd5668/ 正確に我々のデバイスのSDカードにあるものと一致します.私たちは、新しいISCSI対応カーネルを使用するようにデバイスに伝える必要があります.
    私は下に次の行を追加$TFTP_ROOT/2edd5668/config.txt , しかし、あなたの特定を使用する必要がありますinitrd.img バージョン.
    initramfs initrd.img-5.15.21-v8+ followkernel
    

    デバイスのiscsi lunを作成する
    簡単にするために、私は32 GBのLUNを作成しています.私は、それが私が使っていたSDCARDのサイズであるので、私は32 GBを選びました.また、私はLunとISCIターゲットの命名にラズベリーパイのシリアル番号を使用しました.
    あなたの新しいISCSI Lunがアクセス可能であることを確認するために、我々はそれをラズベリーパイ3 b +から接続します.
    # set the IP address of the ISCSI server
    export ISCSI_IP=192.168.1.248
    # 
    sudo iscsiadm -m discovery -t sendtargets -p $ISCSI_IP | grep 2edd5668
    
    出力には、新しいISCSIターゲットが含まれます.
    192.168.1.248:3260,1 iqn.2004-04.com.qnap:ts-231p:iscsi.2edd5668.21250c
    
    Targetstra IQNの上からiqn.2004-04.com.qnap:ts-231p:iscsi.2edd5668.21250c そして、それを格納する環境変数を作成します.
    export TARGET_IQN=iqn.2004-04.com.qnap:ts-231p:iscsi.2edd5668.21250c
    

    ISCSI Lunをラズベリーパイに取り付ける
    ISCSI LUNへのログイン、この例はCHAP認証を使用していません.
    sudo iscsiadm -m node -l -T $TARGET_IQN -p $ISCSI_IP
    
    成功は次のようになります.
    Logging in to [iface: default, target: iqn.2004-04.com.qnap:ts-231p:iscsi.2edd5668.21250c, portal: 192.168.1.248,3260]
    Login to [iface: default, target: iqn.2004-04.com.qnap:ts-231p:iscsi.2edd5668.21250c, portal: 192.168.1.248,3260] successful.
    
    新しいiSCSI接続を有効にしますsudo fdisk -l ラズベリーパイ3 B +から、このようなものを探してください
    Disk /dev/sda: 32 GiB, 34359738368 bytes, 67108864 sectors
    Disk model: iSCSI Storage   
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 1048576 bytes / 1048576 bytes
    
    Lunが現れている/dev/sda この場合
    # Format the LUN attached as /dev/sda to ext4
    sudo mkfs.ext4 /dev/sda
    
    mke2fs 1.46.2 (28-Feb-2021)
    Creating filesystem with 8388608 4k blocks and 2097152 inodes
    Filesystem UUID: f581fa52-f7ea-4c87-91cc-e236d64f63a6
    Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000, 7962624
    
    Allocating group tables: done                            
    Writing inode tables: done                            
    Creating journal (65536 blocks): done
    Writing superblocks and filesystem accounting information: done
    
    # Get the UUID of the LUN
    sudo blkid /dev/sda
    
    /dev/sda: UUID="f581fa52-f7ea-4c87-91cc-e236d64f63a6" BLOCK_SIZE="4096" TYPE="ext4"
    
    # Mount the new disk
    sudo mount /dev/sda /mnt
    

    既存のインストールをマウントLUNにコピーします
    このステップには多少時間がかかる.我々はすべてのファイルをコピーしている/ ラズベリーパイ3 b +上のSDカードのネットワーク接続LUNへの分配.ブート中にマウントされるディレクトリを除く.
    # Copy / partition to /mnt
    sudo rsync -avhP --exclude /boot --exclude /proc --exclude /sys --exclude /dev --exclude /mnt / /mnt/
    # Create directories that are mounted during boot
    sudo mkdir /mnt/{dev,proc,sys,boot,mnt}
    

    /etc/fstabからSDカードの詳細を削除する
    cat /mnt/etc/fstab
    
    以前
    proc            /proc           proc    defaults          0       0
    PARTUUID=9633a3a2-01  /boot           vfat    defaults          0       2
    PARTUUID=9633a3a2-02  /               ext4    defaults,noatime  0       1
    # a swapfile is not a swap partition, no line here
    #   use  dphys-swapfile swap[on|off]  for that
    
    行を削除するPARTUUID これはSDカードを参照している.
    その後
    proc            /proc           proc    defaults          0       0
    # a swapfile is not a swap partition, no line here
    #   use  dphys-swapfile swap[on|off]  for that
    

    TFTPサーバ上のカーネル設定を更新する
    ファイルシステムを更新しました.ネットワーク上にロードされているカーネルを再訪問する必要があります.我々はそれをマウントする方法を教えてください/ 経由でファイルシステム.
    raspberry pi 3 b +デバイスを識別するISCSIイニシエータは/etc/iscsi/initiatorname.iscsi
    sudo cat /etc/iscsi/initiatorname.iscsi
    
    ## DO NOT EDIT OR REMOVE THIS FILE!
    ## If you remove this file, the iSCSI daemon will not start.
    ## If you change the InitiatorName, existing access control lists
    ## may reject this initiator.  The InitiatorName must be unique
    ## for each iSCSI initiator.  Do NOT duplicate iSCSI InitiatorNames.
    InitiatorName=iqn.1993-08.org.debian:01:2ccb20a316
    
    TFTPサーバでは、$TFTP_ROOT/2edd5668/cmdline.txt ファイル.
    ISCSIドライブをマウントするためにこれらの詳細を追加/更新します.
  • ip =::2 edd 5668 : eth 0 : DHCP
  • デバイスのホスト名
  • root = uuid = f 581 1 fa 52 - f 7 EA - 4 c 87 - 91 c - e 236 d 64 f 63 a 6
  • lkidに対するblkidコマンドから
  • ISCSIRACEイニシエータ= IQN.1993 - 08org.デビアン
  • IssiSage TargetRange name = iqn.2004年4月.COM .QNAP TS‐231 P:ISCSI2 edd 566821250 C
  • <高橋潤子>
  • ISCSIANS TargetLandポート= 3260
  • RW
  • 以前
    console=serial0,115200 console=tty1 root=PARTUUID=9633a3a2-02 rootfstype=ext4 fsck.repair=yes rootwait cgroup_enable=cpuset cgroup_enable=memory cgroup_enable=pids cgroup_memory=1 systemd.unified_cgroup_hierarchy=0
    
    その後
    console=serial0,115200 console=tty1 root=PARTUUID=9633a3a2-02 rootfstype=ext4 fsck.repair=yes rootwait cgroup_enable=cpuset cgroup_enable=memory cgroup_enable=pids cgroup_memory=1 systemd.unified_cgroup_hierarchy=0 ISCSI_INITIATOR=iqn.1993-08.org.debian:01:2ccb20a316 ISCSI_TARGET_NAME=iqn.2004-04.com.qnap:ts-231p:iscsi.2edd5668.21250c ISCSI_TARGET_IP=192.168.1.248 ISCSI_TARGET_PORT=3260 rw
    

    This all needs to be on a single line.



    準備ができて再起動!
    ラズベリーパイ3 B +装置から:
    # Unmount the drive
    sudo umount /mnt
    # Disconnect from ISCSI
    sudo iscsiadm -m node --logout all
    # Shutdown
    sudo shutdown now
    
    SDカードを削除し、デバイスを再起動!

    概要
    あなたが細心の注意を払っていたならば、あなたはcmdline.txt また、デフォルトではデフォルトの設定もありました.そこにあるk3s よく走る.
    この記事は、ラズベリーパイ3 b +に非常に特異的で、ISCSIを使用しています.ラズベリーパイ4を使用したフォローアップ例を探してください.
    すぐに、私はRaspberry PI 3 B +とRaspberryarkade and k3sup Kubernetes抽象化層をこれらのHOMELABデバイス全体に設定する.

    謝辞と引用
  • https://www.raspberrypi.com/documentation/computers/config_txt.html#boot-options
  • https://stuff.drkn.ninja/post/2016/11/08/Net-boot-%28PXE-iSCSI%29-with-a-RaspberryPi-3