/dev/sda **가끔**은 smartctl에 의해 /dev/sdb와 혼동됩니다.

/dev/sda **가끔**은 smartctl에 의해 /dev/sdb와 혼동됩니다.

cron.daily두 개의 동일한 SATA SSD에서 SMART 통계를 수집하기 위해 스크립트를 실행하고 있습니다 . 그러나 smartctl -A /dev/sda/dev/sdb에 대한 통계가 반환되는 경우가 있습니다. 이 경우 smartctl -A /dev/sdb/dev/sdb에 대한 통계가 반환됩니다. 그러나 때로는 그것이 옳을 때도 있습니다!

시스템은 M2 nvme0n1에서 /로 부팅되고 SATA SSD 중 하나에 /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), 장치 제조업체, 모델 및 일련 번호를 제공하는 심볼릭 링크를 사용하는 것을 선호합니다 . 각 드라이브의 일련 번호가 적힌 스티커 라벨을 인쇄하여 교체해야 할 경우 장치 노드 이름과 혼동할 위험 없이 쉽게 찾을 수 있습니다.

예를 들어, 내 시스템 중 하나에 있는 일부 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규칙에 따라 생성됩니다. 내 데비안 시스템에서는 /lib/udev/rules.d/60-persistent-storage.rules이러한 체계 대신에 또는 추가로 자신만의 이름 지정 체계를 원한다면 자신만의 규칙을 작성할 수 있습니다. 이렇게 하고 싶은 이유는 별로 없지만 원한다면 할 수 있습니다.

답변2

@cas가 제기한 요점 강조

이전에 내 모든 PC에는 하나 또는 두 개의 SATA/IDE 디스크가 있었고 그 중 하나에는 "/"가 있었습니다. 분명히 이러한 조건에서는 적절한 /dev/sdX 식별 없이 작업을 실행할 수 없습니다.

그러나 "/"가 포함된 별도의 부팅 드라이브, 특히 다른 유형의 부팅 드라이브(NVME)에는 /dev/sdX 명명 체계에 속하지 않으며 시간 제한이 적용되지 않는 스크립트, 프로그램 등이 포함되어 있습니다.

/dev/disk/by-id/일련번호를 포함한 올바른 하드웨어 이름을 사용하면 잘못된 식별로 인해 발생하는 문제를 예방할 수 있습니다. 불행하게도 디스크에는 쉽게 액세스할 수 있는 UUID가 없습니다(파티션에는 있지만).

dd if=/dev/sdX...그런데 매우 위험한 명령을 권장하는 예가 많이 있습니다(특히 YouTube에는) . 어쩌면 이것들을 좀 더 주의해서 다루어야 하지 않을까?

관련 정보