Ubuntu에서 외장 하드 드라이브의 쓰기 캐싱 기능(dmesg)을 실제로 어떻게 비활성화합니까?

Ubuntu에서 외장 하드 드라이브의 쓰기 캐싱 기능(dmesg)을 실제로 어떻게 비활성화합니까?

한번은 sudo hdparm -W 0 /dev/sdb하드디스크의 쓰기 캐시를 껐는데 정보에 /dev/sdb: write-caching = 0 (off) 따르면 실제로 쓰기 캐시가 꺼진 것으로 나타났습니다.

하지만 이 지시문을 사용하면 다음과 같이 sudo dmesg표시됩니다.

[23361.915713] sd 32:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA

쓰기 캐시가 여전히 활성화되어 있는 것을 확인하고 Ubuntu에서 외장 하드 드라이브의 쓰기 캐시 기능(dmesg)을 실제로 비활성화하는 방법을 알고 싶습니다.

답변1

출력은 dmesg장치가 처음 발견되었을 때의 것으로 보입니다. 장치 설정이 변경될 때마다 이 정보를 다시 인쇄하지 않습니다.

hdparm이렇게 하면 실제로 쓰기 캐싱을 비활성화해야 합니다 . hdparm -W /dev/sdb쿼리를 다시 실행하여 확인할 수 있습니다 .

답변2

USB(MSC/UAS) 드라이브는 운영 체제에 SCSI 디스크로 표시됩니다. 백엔드 드라이브가 (S)ATA 드라이브인 경우 SATL(SCSI-ATA Translation Layer)은 어댑터/섀시의 브리지 칩 펌웨어에 구현됩니다.

SATL은 ATA/ACS 표준의 모든 명령/기능에 대한 매핑을 구현하지는 않지만 쓰기 캐시 설정과 같은 일반적인 기능에 대한 매핑을 갖는 경우가 많습니다. 어느 쪽이든 드라이브의 쓰기 캐시 설정(즉, 캐시 모드 페이지의 WCE 비트)에 매핑된 해당 SCSI 기능은 드라이브에서 쓰기 캐시가 활성화되었는지 확인하기 위해 커널이 모니터링하는 기능입니다.

즉, 커널 설정을 변경 hdparm한 후에도 이를 인식하지 못한다면 SATL이 결과를 감지/반영하지 않거나 커널에 알리지 않기 때문입니다.

캐시 모드 페이지와 MODE SENSE / MODE SELECT 명령을 구현하는 쉘이 있지만 WCE 비트는 실제 쓰기 캐시 설정과 전혀 연결되어 있지 않습니다. WCE 비트 읽기/쓰기는 드라이브 자체의 설정을 반영/변경하지 않습니다.

이 최악의 시나리오에서 쓰기 캐싱을 비활성화하고 커널에 새 캐시 설정을 알리려면 hdparmSATL 및 WCE 비트의 실제 설정을 각각 변경해야 합니다.

WCE 비트가 설정을 반영하는 상황이 있을 수 있지만 를 사용하여 설정을 변경하면 캐시된 값을 트리거하고 업데이트해야 하며 hdparm이는 ATA PASS-THROUGH 명령을 사용하여 수행됩니다. 이런 경우에는 hdparm이를 피하고 WCE 비트를 변경하여 설정을 변경하는 것만으로도 충분할 수 있습니다. ( 실제 설정이 변경되었는지 확인하려면 hdparm또는 를 사용하면 됩니다 .)smartctl

WCE 비트를 변경하려면 최소한 두 가지 방법이 있습니다. 하나는 사용자 공간 프로그램을 사용하는 것입니다 sdparm.

sdparm --set WCE=0 /dev/sdX

write_through또 다른 방법은 scsi 디스크 sysfs 파일 에 쓰는 것입니다 cache_type. 다음 명령을 사용하여 파일을 찾을 수 있습니다.

find /sys/ -type f -path '*scsi_disk*cache_type'

lsscsi예를 들어(또는 USB 드라이브)의 도움으로 수정하려는 결과를 lsusb.py -ui쉽게 식별할 수 있어야 합니다 .find

(이 파일은 /sys/block/sdX/queue/write_cache내용이 있지만 찾고 있는 파일이 아닙니다.표현하다WCE 비트의 현재 값도 마찬가지입니다. )

또한 이 두 설정은 모두 일시적일 수 있습니다. 즉, 재부팅이나 전원을 껐다 켜도 저장되지 않습니다. 따라서 해당 설정을 유지해야 하는 경우 부팅/주문할 때마다 위 프로그램을 실행해야 합니다.

편집: WCE를 설정할 때마다 제가 언급한 첨부 파일이 실제로 요청된 1값 에 관계없이 실제 쓰기 캐시 설정을 활성화로 설정한다는 것을 깨달았습니다 0. 비슷한 섀시가 있는 경우 항상 WCE를 0으로 먼저 변경한 다음 실제 캐시 설정을 변경하는 데 사용하십시오 hdparm.

답변3

USB를 통해 이동식 미디어에 대한 쓰기 캐싱을 비활성화하려면 파일을 만들고 (원하는 대로 이름을 지정할 수 있습니다. 로 시작하고 끝나는지 /etc/udev/rules.d/99-udisks2-usb_mount.rules확인하세요 ) 다음을 입력하세요.99.rules

SUBSYSTEMS=="usb", SUBSYSTEM=="block", ENV{ID_FS_USAGE}=="filesystem", ENV{UDISKS_MOUNT_OPTIONS_DEFAULTS}+="sync", ENV{UDISKS_MOUNT_OPTIONS_ALLOW}+="sync"

그런 다음 다시 시작하거나 명령을 실행하십시오.sudo udevadm control --reload-rules


특정 드라이브에 대한 쓰기 캐싱을 비활성화하려면 /etc/fstabgnome-disks를 사용하여 설치 옵션을 포함하도록 드라이브 옵션을 편집하거나 수정할 수 있습니다sync

관련 정보