メーカーが放棄したネットワークストレージの可能性を高める

特定のスマートデバイスを操作する過程で、ユーザーは多くの場合、メーカーだけが解決できる多くの問題に直面します。 解決策は近いようです:発見されたバグについて公式チャンネルを介して通知し、メーカーが修正し、新しいファームウェアをアップロードし、更新の指示を与え、更新され、誰もが満足しています。







実際には、すべてがそれほど素晴らしいわけではなく、製造業者に連絡することはしばしば困難または完全に不可能です。 または、このデバイスモデルのサポート期間が短期間で終了する場合があり、その場合は誰も修正に関与しません。







このストーリーは、組み込みデバイス用のソフトウェアを更新するプロセスを理解するための初期スキル、欲求、および時間を持ち、自分でできることについてです。







画像







せっかちな人のために:最終的に、最新バージョンのU-Bootローダーを備えた本格的なデバイスを手に入れました。 画像 Debian Jessieおよび 画像 ボード上のOpenMediaVault







内容:







  1. 装置

  2. デバイスの準備

  3. ビルドとアップグレード

  4. インストールとセットアップ

  5. おわりに




装置



件名-D-Link DNS-325をご覧ください







画像







このデバイスには、ARMアーキテクチャのARMプロセッサMarvell Kirkwood 88F6281(EABI)、128MBのNANDメモリ、256MBのRAMが搭載されています。 2つのHDDベイ、ネットワーク、および背面パネルのUSBコネクタを装備。







そのことはそれほど強力ではありませんが、家庭での使用の枠組みの中でさえ、標準ファームウェアでのさらなる使用が不快になっているという主張が蓄積されています。







グリッチ



重要度の降順:







  1. グリッチUPnP AVメディアサーバー。 メディアサーバーはリポジトリで構成され、オーディオおよびビデオ素材にインデックスを付け、 DLNAプロトコルを使用してそれらを配信します。 問題は、ハードドライブに追加された一部のファイルが自動的にインデックス付けされず、テレビ/他のDLNA互換デバイスから入力したときに表示されないことです。 メディアサーバーモードを手動で切り替えると、データベースが最初から作成されますが、数時間かかります。 映画をダウンロードして視聴したい場合は、最適なソリューションではありません。







  2. 夜中に突然「スリープ」状態から目が覚めると(ディスクでガサガサ音がする、ファンの音がする)不快感が生じます。 そして、どのような種類のサービスタスクが開始されたかについてのログの1行ではありません。 ファン開始イベントのみ:

    Apr 20 03:55:09 Set Fan Speed To "LOW".









  3. Webインターフェース フリーズ、セッションのダンプなどがあります。







  4. 追加。 公式非公式の両方があります。 問題は、誰もソフトウェアを最新に保っていないことです。 この形式では、バグ修正と脆弱性も待つ価値はありません。







  5. ロギングシステムはひどいです。 情報量が少ないだけでなく、神話上のアーティファクトもいくつかあります。







  6. Linux いくつ 現代のコーヒーメーカー Linuxベースの組み込みデバイス。 これは、安定性、脆弱性などの問題が隣にあることを意味し、Linux 2.6カーネルはストックファームウェアでスピンし、Linux 4.11はすでにヤードにあります。







  7. USBプリンターの奇妙なバグ。 ストレージには、フラッシュドライブ、USBドライブ、プリンター、スキャナーを接続するためのUSBポートが装備されています。 そして、私のUSBプリンターはネットワーク上で完全に共有され、2 TBのHDDが内部にインストールされました。 3 TBのHDDを右側のケースに挿入するとすぐに、プリンターが機能しなくなりました。 さまざまなディスクのさまざまな組み合わせを使用した一連のテストの後、左側のケースにインストールされているのは1つだけであることがわかりました。


代替OSの選択



Alt-f



適合した代替案から最初に見つかったのは、オープンなAlt-Fファームウェアでした。 機能は独自のファームウェア、最小限のWebインターフェースに劣らず、更新は安定して行われます。 fun_plugプラグインのサポートもあります。







画像 FreeNASおよび 画像 NAS4Free



プロジェクトは興味深いが、かさばる。 FreeBSDに基づいています。 システム要件が高すぎます。







ここで、たとえば、 FreeNAS 10 "Corral"のシステム要件









ところで、最近、FreeNAS 10 "Corral"のリリースがリコールれました 。 システム要件が増加したため。







画像 OpenMediaVault



OMVはオープンソースのNASシステムです。 FreeNASのブランチですが、Debian Linuxに適合しているため、マルチプラットフォームです。 比較的低いシステム要件と組み合わせると、それだけが適切な候補になります。 機能はプラグインによって十分に拡張できますが、最も重要なことは、本格的なDebianがリポジトリにアクセスできることを意味します。つまり、いくつかのパッケージをインストールすることで必要なものを置くことができます。







このモデルでは、 fun_plugを使用したハックを使用してDebianを開始する簡単な方法がありますが、これは単なるリアルタイム拡張機能であり、Wheezyより古いDebianバージョンは起動できません。







残念ながら、OMVにはarmelアーキテクチャ用のパッケージを備えた既製のDebianビルドがありません。 さらに、開発者はこれまでのところ、i386およびamd64ビルドのみが安定していると認識しています。 ARM実験的サポート:







OpenMediaVault on Armのサポートは試験的なものです。 ほとんどの場合、デバイスにDebian Wheezyをインストールする方法を決定する必要があります。


デバイスの準備



内蔵のNANDメモリは、私たちのアイデアには適していません-小さすぎます。 ストレージに挿入されたディスクにシステムを保存する必要はまったくありません。 その結果、脳デバイスと周辺コンポーネントが混在します。 そして、ディスクを変更したい場合、または壊れますか?







適切なオプションは1つしかありませんでした。USBフラッシュドライブをインストールすると、そこにシステム全体がインストールされます。 このアプローチにより、システムのバックアップがより簡単になり、破損した場合のフラッシュドライブの交換が簡単になります。







USBデバイスの場合、別のUSBネットワークハブを使用することにしました。とにかく1つのスロットでは不十分です:)







追加の鉄



外部から脳にアクセスするために、ボードにはシリアルUARTポートがあります。 特別なプログラマーでROMをフラッシュする代わりに、ボード上の接点に接続し、特別なコンバーターを介してターミナルエミュレーターを介してデバイスと通信できます。







組み込みデバイスのUARTテーマは非常に広範囲であり、気になる人は、良いレビュー記事を読むことができます: https : //geektimes.ru/post/253786/







次のコンポーネントが選択され、購入されました。









コンバーター接続



デバイスを開き、ボードを取得します

画像







UARTポートを探しています(左側に4つのピン)

画像







ピン配列は次のとおりです(逆順):{RXD、(空)、3.3v、GND、TXD}







プラグをはんだ付けし、ワイヤを挿入します

画像







ケースを組み立て、カバーのみを取り外したままにします

画像







さて、内蔵のマイクロコンピューターにアクセスするために、ボードを入手する必要はありません-配線は既に配線されているので、ネットワークストレージのフロントカバーを取り外す必要があります。







これはシリアルポートなので、直列に接続します。







RXからTX、TXからRX

画像







これで、機器のすべての機械的作業が完了しました。







試運転



UARTプロトコルを介して通信するには、次のものが必要です。

kwboot-「オンザフライ」でデバイスのブートローダーを起動するユーティリティ

minicom-UARTプロトコル用のターミナルエミュレータ







ホストシステムでminicomを実行します。







 # minicom -D /dev/ttyAMA0 -b 115200 -8
      
      





電源を接続し、デバイスの電源を入れ、コンソールへのダウンロードログの出力を楽しみます。







ブートログ
 ** MARVELL BOARD: DB-88F6281A-BP LE U-Boot 1.1.4 (Jan 21 2011 - 09:42:39) Marvell version: 3.4.14.DNS-325.02 U-Boot code: 00600000 -> 0067FFF0 BSS: -> 006CEE80 Soc: MV88F6281 Rev 3 (DDR2) CPU running @ 1200Mhz L2 running @ 400Mhz SysClock = 400Mhz , TClock = 200Mhz DRAM CAS Latency = 5 tRP = 5 tRAS = 18 tRCD=6 DRAM CS[0] base 0x00000000 size 256MB DRAM Total size 256MB 16bit width Flash: 0 kB Addresses 8M - 0M are saved for the U-Boot usage. Mem malloc Initialization (8M - 7M): Done NAND:128 MB *** NAND read: device 0 offset 0x100000, size 0x300000 load addr .... =a00000 3145728 bytes read: OK NAND read: device 0 offset 0x600000, size 0x300000 load addr .... =f00000 3145728 bytes read: OK ## Booting image at 00a00000 ... Image Name: Linux-2.6.31.8 Created: 2012-06-26 3:38:43 UTC Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 2565784 Bytes = 2.4 MB Load Address: 00008000 Entry Point: 00008000 Verifying Checksum ... OK OK ## Loading Ramdisk Image at 00f00000 ... Image Name: Ramdisk Created: 2014-01-21 4:33:41 UTC Image Type: ARM Linux RAMDisk Image (gzip compressed) Data Size: 1581012 Bytes = 1.5 MB Load Address: 00e00000 Entry Point: 00e00000 Verifying Checksum ... OK Starting kernel ... Uncompressing Linux............................................................. **Linux version 2.6.31.8** (jack@swtest6) (gcc version 4.2.1) #8 Tue Jun 26 11:38:42 CPU: Feroceon 88FR131 [56251311] revision 1 (ARMv5TE), cr=00053977 CPU: VIVT data cache, VIVT instruction cache Machine: Feroceon-KW Using UBoot passing parameters structure Memory policy: ECC disabled, Data cache writeback Built 1 zonelists in Zone order, mobility grouping off. Total pages: 65024 Kernel command line: root=/dev/ram console=ttyS0,115200 :::DB88FXX81:egiga0:none PID hash table entries: 1024 (order: 10, 4096 bytes) Dentry cache hash table entries: 32768 (order: 5, 131072 bytes) Inode-cache hash table entries: 16384 (order: 4, 65536 bytes) Memory: 256MB = 256MB total Memory: 246528KB available (4828K code, 323K data, 136K init, 0K highmem) *** NAND device: Manufacturer ID: 0xec, Chip ID: 0xf1 (Samsung NAND 128MiB 3,3V 8-b) Scanning device for bad blocks Using static partition definition Creating 6 MTD partitions on "nand_mtd": 0x000000000000-0x000000100000 : "u-boot" 0x000000100000-0x000000600000 : "uImage" 0x000000600000-0x000000b00000 : "ramdisk" 0x000000b00000-0x000007100000 : "image" 0x000007100000-0x000007b00000 : "mini firmware" 0x000007b00000-0x000008000000 : "config"
      
      





興味があるなら、ここに完全な結論があります:

https://pastebin.com/6SRA6Qgq







ビルドとアップグレード



すべてのアセンブリアクションは、Debian Stretch(amd64)を実行しているメイン(ホスト)システムで実行されます。







以下を収集して更新します。







  1. ブートローダー-U-Boot
  2. カーネル-Linux Kernel 4.10
  3. Debian Jessieルートファイルシステム
  4. システム初期化イメージ-Initramfs


基本的な組み立てツール:







  1. armelアーキテクチャ用のクロスコンパイラ 。 Debianでは、これはgcc-arm-linux-gnueabiパッケージです
  2. ユーティリティ:

    • git-プロジェクトリポジトリから必要なバージョンをダウンロードする
    • make-アセンブリスクリプトを実行します
    • debootstrap-ルートファイルシステムをダウンロードする
    • mkimage-ブートローダーが理解できる形式にファイルを再フォーマットするユーティリティ
    • BusyBox-初期システム初期化用のユーティリティセット
    • 関連する依存関係とライブラリ。


ブートローダー



このデバイスには、わずかに切り捨てられたU-Boot 2011ブートローダーがあります。 最新の安定バージョンに更新します。







ダウンロード:







 $ git clone --branch v2017.05 git://git.denx.de/u-boot.git
      
      





カスタマイズ:







 $ cd u-boot $ nano u-boot/include/configs/dns325.h
      
      





行を追加します。

#define CONFIG_CMD_BOOTZ



-zImageカーネルのロードをサポートします。

#define CONFIG_CMD_EXT4



- ext4 FSおよび関連するブートローダーコンソールコマンドをサポートします。







 $ make dns325_defconfig # # configuration written to .config # $ make u-boot.kwb CROSS_COMPILE=arm-linux-gnueabi-
      
      





この時点で、このファイルの重量を知る必要があります。







 $ printf "0x%x\n" `stat -c "%s" u-boot.kwb` 0x7315c
      
      





16進表記(HEX)で画像のサイズを表示します。この形式では、NANDメモリに書き込むときに役立ちます。







メモリで動作するブートローダーから、結果のU-BootイメージをNANDメモリに書き込むことができます。 新しいイメージがハードウェア上でまったく起動することを最初に確認したかったため、現在のストックブートローダーからこれを行わないことにしました.ext4サポートは新しいブートローダーイメージに以前含まれていたので、耳で失神することができます:このイメージをUSBフラッシュドライブにコピーして起動しますkwbootを使用して同じイメージから。







ファイルをミニコンピューターのメモリに転送するには、 Kermit経由、 TFTP経由、物理的に接続されたドライブ経由(オプション)のオプションがいくつかあります。







kwbootを使用すると、物理的に(RAMにのみ)書き込むことなく、一般的にNANDメモリを無視することなく、ブートローダーを渡した状態でボードを起動できます。 このメカニズムにより、NANDメモリの破損やファームウェアの失敗が原因で焦げた場合でも、デバイスをクラッシュさせることができます。







デバイスの電源を切り、kwbootを実行し、電源ボタンをクリックします。 中断する必要がある後続のロードでイメージを塗りつぶすプロセスを実行する必要があります。







記入してダウンロード
 # tools/kwboot -p -b u-boot.kwb -B115200 -t /dev/ttyUSB0 Sending boot message. Please reboot the target.../ Sending boot image... 0 % [......................................................................] 1 % [......................................................................] 3 % [......................................................................] *** 96 % [......................................................................] 98 % [...........................................] [Type Ctrl-\ + c to quit] U-Boot 2017.05-dirty (May 10 2017 - 02:56:44 +0300) D-Link DNS-325 SoC: Kirkwood 88F6281_A1 DRAM: 256 MiB WARNING: Caches not enabled NAND: 128 MiB In: serial Out: serial Err: serial Net: egiga0 IDE: ide_preinit failed Hit any key to stop autoboot: 0 =>
      
      





起動しました。 次に、 u-boot.kwbイメージをNAND領域に書き込む必要があります。 ただし、NANDメモリに書き込むには、最初に読み取ってからRAMメモリに書き込む必要があります。







ext4フラッシュドライブを作成し、パーティションに「rootfs」という名前を付けます(パーティションの名前でルートFSをマウントします)。







 # mkfs.ext4 /dev/sdb1 # e2label /dev/sdb1 rootfs
      
      





ファイルをUSBフラッシュドライブにコピーし、USBフラッシュドライブをNASに挿入して初期化します。







 => usb start starting USB... USB0: USB EHCI 1.00 scanning bus 0 for devices... 2 USB Device(s) found scanning usb for storage devices... 1 Storage Device(s) found
      
      





画像をメモリに書き込みます。 アドレス(オフセット)は重要ではありません。主なことはRAMを超えないことです。 この場合、0x1000000になります。







 => ext4load usb 0:1 0x1000000 /u-boot.kwb 471388 bytes read in 77 ms (5.8 MiB/s)
      
      





ブートローダーが保存されているNANDエリアをクリアします。







 => nand erase 0x000000 0x7315c NAND erase: device 0 offset 0x0, size 0x7315c Erasing at 0x60000 -- 100% complete. OK
      
      





(NANDメモリの先頭から、以前に計算したファイルのサイズに等しいオフセットまで)







RAMメモリ領域からNANDメモリ領域にブートローダーを書き込みます。







 => nand write 0x1000000 0x000000 0x7315c NAND write: device 0 offset 0x0, size 0x7315c 471388 bytes written: OK
      
      





0x1000000-RAMのどこを読み取るか

0x000000-NANDに書き込む場所

0x73044-サイズ







すべて、再起動して新しいブートローダーの起動を楽しむことができます:







 U-Boot 2017.05-dirty (May 10 2017 - 02:56:44 +0300) D-Link DNS-325 SoC: Kirkwood 88F6281_A1 DRAM: 256 MiB WARNING: Caches not enabled NAND: 128 MiB In: serial Out: serial Err: serial Net: egiga0 IDE: ide_preinit failed Hit any key to stop autoboot: 0 =>
      
      





この段階で、たとえば最初に判明したように、デバイスが焦げて起動を拒否した場合(明らかに、RAMメモリからNANDへの書き込み時にブートローダーイメージのサイズを入力したときに封印された)、パニックに突入しないでください。 kwbootを使用してデバイスを起動し、記録を繰り返すこともできます。







ルートシステム(ステージ1)



debootstrapツールを使用します。 通常、異なるアーキテクチャのシステムのrootfsの形成は、2つの段階で行われます。--foreginフラグを使用してディレクトリにダウンロードし、次にqemuをセットアップして、「debootstrap --second-stage」を実行します。 qemuを台無しにしたくなかったので、動作中のNASですぐに第2段階を実行することにしました。







コンテンツをUSBフラッシュドライブ(/ mnt / usb /にマウント)にダウンロードします。







 # debootstrap --variant=minbase --foreign --arch=armel --include=dbus,nano jessie /mnt/usb/ http://ftp.ru.debian.org/debian/
      
      





半分インストールされたシステムが起動しないように、その時間のinitファイルの名前を変更します。







 # mv /mnt/usb/sbin/init /mnt/usb/sbin/init.bak
      
      





最初の段階は準備ができています。







コア



おそらく最も難しいステージです。 必要なすべての機能とプログラムが正しく機能するように、カーネルを構成することが非常に重要です。 それ以外の場合、奇妙な症状を伴うある種の卑劣な間違いを犯しやすくなります。







最初は、Kirkwood用の既製のカーネルを見つけることができたのは幸運でしたが、どのモード(OHCI、EHCI)でもフラッシュドライブのマウントを拒否したため、カーネルを自分でビルドする必要がありました。







ダウンロード:







 $ git clone --branch v4.10 git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc.git
      
      





ボード(ARMv5)のプリインストール構成をロードします。 私の場合、これはmvebu_v5_defconfigです。







 $ make ARCH=arm mvebu_v5_defconfig # # configuration written to .config # $ make ARCH=arm menuconfig
      
      





カスタマイズ可能。 すべてを構成して確認し、理想的には各パラメーターを調べて、必要かどうかを判断する必要があります。 ホスト名を設定し、initramfs / initrdサポートをオンにし、サウンドとUSB 3.0サポートをオフにし、ext2およびext3のドライバーをオフにし(ext4ドライバーは以前のすべてのバージョンをマウントできます)、ディスククォータを有効にし、Kirkwood、Marvell Orionボードのサポートをオンにしました。 systemdサポートの必須パラメーターも含まれています。 おそらく、多くの設定があるため、言及しなかったことがあります。 これが私のカーネル設定です: https : //pastebin.com/MZrRXnXX







システムおよびOMVのインストール、構成、および操作中に多くのことが出てきます。 この場合、必要な行を追加し、カーネルを再構築して、USBフラッシュドライブ上のイメージを置き換えるだけです。







組立:







 $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j5 zImage kirkwood-dns325.dtb
      
      





zImageコア自体とkirkwood-dns325.dtbファイルを入手しました。 最後のファイルであるデバイスツリーは、カーネルがボードで特に機能するために必要です。







これらのファイルをUSBフラッシュドライブの/ bootディレクトリにコピーします。







 # cp arch/arm/boot/zImage arch/arm/boot/dts/kirkwood-dns325.dtb /mnt/usb/boot/
      
      





Initramfs



次に、メモリにロードされる軽量イメージを作成し、システムを初期化します。 ブートローダはルートディレクトリ( root=



)でカーネルを直接起動できます。 ただし、ルートFSへのアクセスがない場合は、最小限のコマンドセットを持つコンソールが使用できるため、便利です。







画像のバックボーンは、紳士的なBusyBoxセットです。







ダウンロード:







 $ git clone --branch 1_26_2 git://git.busybox.net/busybox/
      
      





セットアップ:







 $ make defconfig $ make menuconfig
      
      





設定で追加設定する方が良いのは、glibcライブラリの静的リンクのみです。これにより、画像に個別に詰め込む必要がなくなります。







静的リンクglibc

画像







組立:







 $ make ARCH=arm
      
      





次に、イメージ構造を作成し、busyboxを入れます:







 $ mkdir -p initramfs/{bin,sbin,etc,proc,sys,newroot,usr/{bin,sbin}} $ cp busybox/bin/bisybox initramfs/bin $ ln -s initramfs/bin/busybox initramfs/bin/sh
      
      





次に、initスクリプトを作成する必要があります。 これは、デバイスの初期化と制御のDebianへの移行においてすべての魔法が発生する場所です。







初期化スクリプト
 #!/bin/sh /bin/busybox --install -s #Mount things needed by this script mount -t proc proc /proc mount -t sysfs sysfs /sys #Disable kernel messages from popping onto the screen echo 0 > /proc/sys/kernel/printk #Clear the screen clear #Create device nodes mknod /dev/null c 1 3 mknod /dev/tty c 5 0 #Pause bebore USB Storage init sleep 3 #Mount devices mdev -s #Defaults init="/sbin/init" #Mount the root device mount LABEL=rootfs /newroot #Check if $init exists and is executable if [ -h "/newroot/${init}" ] ; then #Unmount all other mounts so that the ram used by #the initramfs can be cleared after switch_root umount /sys /proc #Switch to the new root and execute init exec switch_root /newroot "${init}" fi #This will only be run if the exec above failed echo "Failed to switch_root, dropping to a shell" exec setsid sh exec <"${console}" >"${console}" 2>&1 exec sh
      
      





U-Bootで理解できる形式にパックして変換します。







 $ cd initramfs/ $ find . | cpio -H newc -o > ../initramfs.cpio $ cd .. $ cat initramfs.cpio | gzip > initramfs.igz $ mkimage -n 'uInitramfs' -A arm -O linux -T ramdisk -C gzip -d initramfs.igz initramfs.uImage
      
      





initramfsをコピーします。







 # cp initramfs.uImage /mnt/usb/boot/
      
      





組み立てが完了しました。







インストールとセットアップ



ローダー環境変数



ブートローダーの更新プロセスでは、構成が失われたため、新しいカーネル、Initramfs、デバイスツリーのブートを構成し、ネットワーク設定も復元する必要があります。







minicomから起動し、U-Bootコンソールのデバイスで実行します。







 => setenv console ttyS0,115200 => setenv bootargs console=${console} => setenv bootcmd usb start; run load_kernel; run load_init; run load_dtree; run boot_system => setenv load_kernel ext4load usb 0:1 0x1000000 boot/zImage => setenv load_init ext4load usb 0:1 0x1800000 boot/initramfs.uImage => setenv load_dtree ext4load usb 0:1 0x2000000 boot/kirkwood-dns325.dtb => setenv boot_system bootz 0x1000000 0x1800000 0x2000000 => setenv ethaddr xx:xx:xx:xx:xx:xx => setenv ipaddr 192.168.0.32 => saveenv
      
      





ここではすべてが非常に簡単です。コンソールのパラメーター、カーネルブートを設定し、ファイルをメモリにコピーする場所(ext4load)と読み取り元(bootz)を指定します。 IPアドレスとMACアドレスを書き留めます(MACアドレスはデバイスのステッカーに記載されています)。







NASにフラッシュドライブを挿入し、再起動します。







ルートシステム(ステージ2)



ロード後、BusyBoxに入ります。 rootfsの形成を完了することができます。







 # chroot /newroot # mv /sbin/init.bak /sbin/init # /debootstrap/debootstrap --second-stage # passwd
      
      





デバイスを再起動し、ルートとしてログインします。 この瞬間から完全に起動し、Debianで作業します。







ネットワーク設定



次に、ネットワークを構成して有効にします。







 # touch /etc/systemd/network/wired.network # nano /etc/systemd/network/wired.network
      
      





eth0有線インターフェイスで静的IPの簡単な構成を記述します

[一致]

名前= eth0







[ネットワーク]

アドレス= 192.168.0.32 / 24

ゲートウェイ= 192.168.0.1







ネットワークサービスをオンにして開始する







 # systemctl enable systemd-networkd # systemctl enable systemd-resolved # systemctl start systemd-networkd # systemctl start systemd-resolved
      
      





ネットワークがあります。







ファンとボタンの設定



負荷の高い操作を行う前に、ファンを冷却するように構成する必要があります。 通常、セットアップは簡単です。pwmconfigコマンドを使用すると、CPU温度センサーが配置され、ファンが配置され、それらが接続され、冷却モードをアクティブにするための境界パラメーターが設定されます。







ホームNASの場合、熱の主な部分はプロセッサではなくハードドライブによって生成されるため、これを行うべきではありません。







問題はこれです。ファンを監視するサービスであるfancontrolを使用すると、ボード上に直接配置されているセンサーのみを監視できます。 このユニットには、1つのファンと1つの温度センサーがあります。







解決策があります。必要な場所から情報を強制的に読み取らせることで、ファンコントロールを欺くことができます。 HDDからデータを読み取るには、smartmontoolsパッケージを使用します。







インストール:







 # apt install fancontrol lm-sensors smartmontools
      
      





デフォルトで設定:







 # pwmconfig
      
      





設定の詳細は、たとえばここで読むことができます







次に、config / etc / fancontrolを開き、内容を確認します。 変数「FCTEMPS」は興味深い-温度を取得する場所にデバイスを配置します。

FCTEMPS=hwmon0/pwm1=hwmon1/temp1_input









パスは相対パスであり、ファイル自体は/ sys / class / hwmon / hwmon1 / temp1_inputに生成されます。 情報が保存されている形式を見てみましょう。







 # cat /sys/class/hwmon/hwmon1/temp1_input 41500
      
      





摂氏1000倍(精度のため)。 そのため、ハードドライブの温度値が定期的に更新されるファイルが必要です。 値には1つしか使用できませんが、ドライブを2つ持つことができるため、最大値を考慮して、ファイルに書き込みます。







小さなスクリプトを書きましょう:







 #!/bin/bash while sleep 60 do TEMP1=`smartctl -A /dev/disk/by-id/ata-Hitachi_HDS723030ALA640_MK0311YHG1ZGJA | grep Temperature_Celsius | awk '{print $10 "000"}'` TEMP2=`smartctl -A /dev/disk/by-id/ata-WDC_WD2003FYYS-02W0B1_WD-WMAY05168428 | grep Temperature_Celsius | awk '{print $10 "000"}'` echo $(( $TEMP1 > $TEMP2 ? $TEMP1 : $TEMP2 )) > /etc/temp_hdd done
      
      





1分ごとにSMART情報がHDDセンサーから読み取られ、すべての情報から温度値のみが抽出され、必要な形式で、2つの最大値が/ etc / temp_hddファイルに書き込まれます。 ドライブ文字/ dev / sd [az]は挿入された物理ドライブの順序と数によって異なるため、ドライブをIDで示しました。







スクリプトを/etc/temp_hdd.shに記述します。 次に、起動時に何らかの方法で起動する必要があります。 これには/etc/rc.localファイルが最適です。







「exit 0」の直前に行を書きます

/etc/temp_hdd.sh &









これで、プロセスはシステムの起動時に開始され、バックグラウンドで実行されます。







, /etc/fancontrol, . - :







 # Configuration file generated by pwmconfig, changes will be lost INTERVAL=10 DEVPATH=hwmon0=devices/platform/gpio_fan hwmon1=devices/platform/ocp@f1000000/f1011000.i2c/i2c-0/0-0048 DEVNAME=hwmon0=gpio_fan hwmon1=lm75 FCTEMPS=hwmon0/pwm1=/etc/temp_hdd FCFANS= hwmon0/pwm1=hwmon0/fan1_input MINTEMP=hwmon0/pwm1=45 MAXTEMP=hwmon0/pwm1=55 MINSTART=hwmon0/pwm1=4 MINSTOP=hwmon0/pwm1=0
      
      





. esekeyd :







 # apt install esekeyd # nano /etc/esekeyd.conf
      
      





:







 POWER:/sbin/shutdown -h now RESTART:/sbin/reboot
      
      





, . , .







OMV



OMV :







 echo "deb http://packages.openmediavault.org/public erasmus main" > /etc/apt/sources.list.d/openmediavault.list # apt update # apt install openmediavault-keyring # apt install openmediavault
      
      





apt ( 457), . , .







apt collectd nginx:







 dpkg: dependency problems prevent configuration of openmediavault: openmediavault depends on collectd (>= 5.1.0); however: Package collectd is not configured yet. openmediavault depends on nginx (>= 1.6.2); however: Package nginx is not configured yet.
      
      





nginx /etc/nginx/sites-available/default

listen [::]:80 default_server;





IPv6 .







collectd hostname ip /etc/hosts.

127.0.1.1 dns325









:







 # apt install -f
      
      





. :







 # omv-initsystem
      
      





以上です! . 192.168.0.32, .







画像







おわりに



, , USB .







, . Linux. .







OpenMediaVault 3.x ("Erasmus"), -. , , OMV , D-Link.







. , , , .







: , , - . DLNA , . -, , , nginx + FastCGI.







Enjoy Embedding!








All Articles