/dev/sda **時々**はsmartctlによって/dev/sdbと混同されます。

/dev/sda **時々**はsmartctlによって/dev/sdbと混同されます。

cron.daily2つの同じSATA SSDからSMART統計を収集するためにスクリプトを実行しています。ただし、smartctl -A /dev/sda/dev/sdbの統計が返されることがあります。この場合、smartctl -A /dev/sdb/ dev / sdbの統計が返されます。しかし、時にはそれが正しいときもあります!

システムはM2 nvme0n1から/として起動し、SATA SSDの1つに/ homeがあり、すべてのファイルシステムはUUID参照を使用してfstabを介してマウントされます。

ランダムなスリープコマンドを挿入してみましたが、違いはありません。

の出力には、smartctl出力内容に関する通知は含まれていません。 - 出力例:-

    smartctl 6.6 2017-11-05 r4594 [x86_64-linux-5.10.0-0.bpo.5-amd64] (local build)
Copyright (C) 2002-17, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 1
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  5 Reallocated_Sector_Ct   0x0033   100   100   010    Pre-fail  Always       -       0
  9 Power_On_Hours          0x0032   099   099   000    Old_age   Always       -       2396
. . .

uname -a

Linux hal 5.10.0-0.bpo.5-amd64 #1 SMP Debian 5.10.24-1~bpo10+1 (2021-03-29) x86_64 GNU/Linux

次のスクリプトは、すべての出力を単一のCSV行としてログファイルに書き込みます。

#!/bin/sh

# SMART DISK PROCESSING
# =====================
tmpfile=$(mktemp -q)
today=$(date -u +%d-%m-%Y)

smartctl -A /dev/sdb > $tmpfile

# Output log as a single line - note "Unknown_Attribute" is "POR_Recovery_Count" [unexpected shutdown]
echo -n $today ', ' >> /var/log/disk-monitor.d/sdb-errors.csv
awk 'NR>=8 && NR<=21 {print $1,",",$2,",",$10,",";}' $tmpfile | tr -d '\n' | sed 's/Unknown_Attribute/POR_Recovery_Count/;s/\,$/\n/' >> /var/log/disk-monitor.d/sdb-errors.csv
#------------------------------
smartctl -A /dev/sda > $tmpfile

# Output log as a single line - note "Unknown_Attribute" is "POR_Recovery_Count" [unexpected shutdown]
echo -n $today ', ' >> /var/log/disk-monitor.d/sda-errors.csv
awk 'NR>=8 && NR<=21 {print $1,",",$2,",",$10,",";}' $tmpfile | tr -d '\n' | sed 's/Unknown_Attribute/POR_Recovery_Count/;s/\,$/\n/' >> /var/log/disk-monitor.d/sda-errors.csv

exit 0

答え1

ドライブのデバイスノードが再起動後も一貫して保持されるという保証はありません。起動時に最初に表示される基準として割り当てられます。これは、ハードウェアの変更、カーネルの変更、モジュールのロード順序、マイナーなタイミングの変更などによって異なります。

永続デバイスノード名を指定するには、以下のシンボリックリンクを使用してください/dev/disk/*/。カーネルがどの順序で見つかるかに関係なく、常に同じデバイスの正しいデバイスノードを指します。

/dev/disk/by-id/私は、デバイスタイプ(たとえば、nvme、ata、またはusb)、デバイスメーカー、モデル、およびシリアル番号を提供するシンボリックリンクを使用することを好みます。各ドライブのシリアル番号の付いたステッカーラベルを印刷して交換する必要がある場合は、デバイスノード名と混同する危険なしに簡単に見つけることができます。

たとえば、私のシステムの1つにあるいくつかのSATA SSD(zfs rootfsプール用のパーティションを含む):

# ls -lF /dev/disk/by-id/ata-Crucial* | grep -v part
lrwxrwxrwx 1 root root  9 May  9 20:06 /dev/disk/by-id/ata-Crucial_CT275MX300SSD1_163313AAxxx -> ../../sdl
lrwxrwxrwx 1 root root  9 May  9 20:06 /dev/disk/by-id/ata-Crucial_CT275MX300SSD1_163313AAExxx -> ../../sdq
lrwxrwxrwx 1 root root  9 May  9 20:06 /dev/disk/by-id/ata-Crucial_CT275MX300SSD1_163313AAFxxx -> ../../sdo
lrwxrwxrwx 1 root root  9 May  9 20:06 /dev/disk/by-id/ata-Crucial_CT275MX300SSD1_163313AB0xxx -> ../../sdp

# zpool status ganesh
  pool: ganesh
 state: ONLINE
  scan: scrub repaired 0B in 00:22:42 with 0 errors on Sun May  9 00:46:44 2021
config:

        NAME                                               STATE     READ WRITE CKSUM
        ganesh                                             ONLINE       0     0     0
          mirror-0                                         ONLINE       0     0     0
            ata-Crucial_CT275MX300SSD1_163313AADxxx-part5  ONLINE       0     0     0
            ata-Crucial_CT275MX300SSD1_163313AAExxx-part5  ONLINE       0     0     0
          mirror-1                                         ONLINE       0     0     0
            ata-Crucial_CT275MX300SSD1_163313AAFxxx-part5  ONLINE       0     0     0
            ata-Crucial_CT275MX300SSD1_163313AB0xxx-part5  ONLINE       0     0     0

errors: No known data errors

これらのシンボリックリンクは、再起動するたびに100%の一貫性を維持します(もちろん、ドライブを取り外したり交換したりしない限り)。 いつでもシステム内の特定のドライブに対してまったく同じシンボリックリンクが作成されます。各パーティションへのシンボリックリンクもあります。

ところで、これらのシンボリックリンクはudevルールに従って生成される。私のDebianシステムでは、/lib/udev/rules.d/60-persistent-storage.rulesこれらのスキームの代わりに、または追加の独自の命名スキームが必要な場合は、独自のルールを作成できます。そうしたい理由はあまりありませんが、望むならできます。

答え2

@casが提起したポイントを強調

以前は、私のすべてのPCに1つまたは2つのSATA / IDEディスクがあり、そのうちの1つに「/」がありました。明らかに、これらの条件では、適切な/dev/sdX識別なしでジョブを実行することはできません。

ただし、「/」を含む別の起動ドライブ、特に他の種類の起動ドライブ(NVME) には、/dev/sdX 命名方式に属さず、タイムアウトが適用されないスクリプト、プログラムなどが含まれます。

/dev/disk/by-id/シリアル番号を含む正しいハードウェア名を使用すると、誤った識別によって引き起こされる問題を防ぐことができます。残念ながら、ディスクには簡単にアクセスできるUUIDはありません(パーティションにはありますが)。

dd if=/dev/sdX...しかし、非常に危険なコマンドを推奨する例がたくさんあります(特にYouTubeでは)。多分これらをもう少し注意して扱わなければならないのだろうか?

関連情報