새로 설치된 SSD에서 TRIM을 활성화할 수 없습니다. 우분투 서버 12.04, Linux 3.11.0-15-유니버설. /etc/fstab의 삭제 설정을 통해 TRIM을 켰습니다. TRIM은 fstrim 명령과 함께 사용할 수도 없습니다.
TRIM이 작동하는지 확인하는 방법은 다음과 같습니다.
#for i in {1..100000}; do echo "1" >> tempfile; done
#sudo hdparm --fibmap tempfile
#sudo hdparm --read-sector 293865512 /dev/sda
#rm tempfile
#sync
#sudo hdparm --read-sector 293865512 /dev/sda
TRIM이 활성화된 경우 hdparm --read-sector 명령을 두 번째 실행하면 0이 반환되어야 하지만 결과는 처음 명령을 실행하는 것과 동일합니다.
fstrim 명령이 작동하지 않습니다:
#sudo fstrim -v /
/: 0 bytes were trimmed
이것은 hdparm -i /dev/sda의 결과입니다:
Model=KINGSTON SV300S37A240G, FwRev=520ABBF0, SerialNo=50026B7243004D3E
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4
BuffType=unknown, BuffSize=unknown, MaxMultSect=16, MultSect=1
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=468862128
IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: mdma0 mdma1 mdma2
UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6
AdvancedPM=yes: unknown setting WriteCache=disabled
Drive conforms to: unknown: ATA/ATAPI-2,3,4,5,6,7
이것은 sudo hdparm -I /dev/sda의 결과입니다:
/dev/sda:
ATA device, with non-removable media
Model Number: KINGSTON SV300S37A240G
Serial Number: 50026B7243004D3E
Firmware Revision: 520ABBF0
Transport: Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6, SATA Rev 3.0
Standards:
Used: unknown (minor revision code 0x0110)
Supported: 8 7 6 5
Likely used: 8
Configuration:
Logical max current
cylinders 16383 16383
heads 16 16
sectors/track 63 63
--
CHS current addressable sectors: 16514064
LBA user addressable sectors: 268435455
LBA48 user addressable sectors: 468862128
Logical Sector size: 512 bytes
Physical Sector size: 512 bytes
Logical Sector-0 offset: 0 bytes
device size with M = 1024*1024: 228936 MBytes
device size with M = 1000*1000: 240057 MBytes (240 GB)
cache/buffer size = unknown
Nominal Media Rotation Rate: Solid State Device
Capabilities:
LBA, IORDY(can be disabled)
Queue depth: 32
Standby timer values: spec'd by Standard, with device specific minimum
R/W multiple sector transfer: Max = 16 Current = 1
Advanced power management level: 254
DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 *udma6
Cycle time: min=120ns recommended=120ns
PIO: pio0 pio1 pio2 pio3 pio4
Cycle time: no flow control=120ns IORDY flow control=120ns
Commands/features:
Enabled Supported:
* SMART feature set
Security Mode feature set
* Power Management feature set
Write cache
Look-ahead
* Host Protected Area feature set
* WRITE_BUFFER command
* READ_BUFFER command
* NOP cmd
* DOWNLOAD_MICROCODE
* Advanced Power Management feature set
Power-Up In Standby feature set
* SET_FEATURES required to spinup after power up
SET_MAX security extension
* 48-bit Address feature set
* Mandatory FLUSH_CACHE
* FLUSH_CACHE_EXT
* SMART error logging
* SMART self-test
* General Purpose Logging feature set
* WRITE_{DMA|MULTIPLE}_FUA_EXT
* 64-bit World wide name
* IDLE_IMMEDIATE with UNLOAD
Write-Read-Verify feature set
* {READ,WRITE}_DMA_EXT_GPL commands
* Segmented DOWNLOAD_MICROCODE
unknown 119[6]
* Gen1 signaling speed (1.5Gb/s)
* Gen2 signaling speed (3.0Gb/s)
* Gen3 signaling speed (6.0Gb/s)
* Native Command Queueing (NCQ)
* Phy event counters
* NCQ priority information
* unknown 76[15]
* DMA Setup Auto-Activate optimization
Device-initiated interface power management
* Software settings preservation
* SMART Command Transport (SCT) feature set
* SCT LBA Segment Access (AC2)
* SCT Data Tables (AC5)
* reserved 69[3]
* DOWNLOAD MICROCODE DMA command
* SET MAX SETPASSWORD/UNLOCK DMA commands
* WRITE BUFFER DMA command
* READ BUFFER DMA command
* Data Set Management TRIM supported (limit 1 block)
Security:
Master password revision code = 65534
supported
not enabled
not locked
not frozen
not expired: security count
supported: enhanced erase
4min for SECURITY ERASE UNIT. 2min for ENHANCED SECURITY ERASE UNIT.
Logical Unit WWN Device Identifier: 50026b7243004d3e
NAA : 5
IEEE OUI : 0026b7
Unique ID : 243004d3e
Checksum: correct
이것이 dmesg | grep이 버리는 것입니다:
[ 6.417350] EXT4-fs (sda1): re-mounted. Opts: discard,errors=remount-ro
[ 6.471628] EXT4-fs (sdb1): mounted filesystem with ordered data mode. Opts: discard
이것은 cat /etc/mtab | grep이 버리는 것입니다:
/dev/sda1 / ext4 rw,noatime,nodiratime,discard,errors=remount-ro 0 0
/dev/sdb1 /home/backup ext4 rw,noatime,nodiratime,discard 0 0
또한 OS는 동일하지만 SSD가 다른 두 대의 컴퓨터에 드롭을 통해 TRIM을 성공적으로 활성화했습니다.
답변1
여기서 가장 큰 오해는 TRIM을 발행하면 블록이 지워진다는 것입니다. 사실상 모든 TRIM 명령은 이 위치의 데이터가 더 이상 필요하지 않다는 것을 SSD 운영 체제에 알리는 것입니다. 이상적으로 펌웨어는 이 정보를 사용하여 다음을 수행해야 합니다.
블록의 다른 부분을 덮어쓸 때 이 데이터를 복사하거나 다시 쓰지 마십시오. SSD의 지우기 블록 크기는 (항상?) 쓰기 블록 크기보다 크므로 특정 블록을 다시 써야 할 때 일반적으로 더 큰 영역을 더 큰 영역에 복사하고, 지우고, 다시 써야 한다는 점을 명심하세요. . 업데이트된 데이터가 포함된 영역입니다. 해당 지역의 일부에 대해 TRIM이 발행된 경우 해당 부분을 복사하거나 다시 작성할 필요가 없습니다. 이는 더 빠르고 장치 수명을 단축시키는 불필요한 쓰기를 방지합니다.
추가적인 웨어 레벨링 최적화를 수행합니다.
이들 중 어느 것도 즉시 데이터를 삭제할 필요가 없습니다. 실제로 트림 영역이 삭제 블록 크기보다 작을 때 이런 일이 발생하지 않으면 SSD의 수명이 더 길어질 수 있습니다. 즉, SSD가 TRIM이 발행된 직후 전체 삭제 블록을 포함하는 영역을 삭제하는 것이 좋은 방법일 수 있습니다.
이전에 위 방법으로 성공했다면 삭제 블록 크기가 더 작은 SSD를 사용하고 있을 수 있습니다. 불행히도 제조업체는 이러한 수치를 거의 공개하지 않지만 자세히 살펴보면 512k가 전례가 없는 것 같지 않습니다. 여러 개의 삭제 블록을 포함하는 더 큰 영역을 읽고 쓰면서 시작이나 끝이 아닌 영역의 중간부터 읽으려고 하면 첫 번째 부분에 자체 삭제 블록이 없을 수 있으므로 성공할 수 있습니다.
그러나 16MiB 연속 블록을 사용하더라도 질문과 동일한 결과를 얻습니다.