사용한 SSD 드라이브의 성능을 복원하고 수명을 추정합니까?


70

내 오래된 128GB SSD 드라이브는 현재 1 년 반 정도되었으며 이후 다른 드라이브로 업그레이드했습니다.

기존 SSD를 정리하고 싶습니다 ...

  • 성능을 거의 새로운 수준으로 복원

  • 재활 및 일반적으로 건강 검진

이 작업은 어떻게합니까?


4
복원에 대해서는 다루지 않지만 이 블로그 게시물 이이를 방지하는 데 흥미로울 수 있습니다.
Tamara Wijsman

1
방금 놓쳤을 수도 있지만 아래 답변 중 " 확인 된 " 내용은 없습니다 . 이 질문의 경우, 나는 결국 당신에게 "최고의"효과를 낸 것에 대해 정말로 궁금합니다. (당신이 회상한다면 ...)
비합리적인 John

답변:


56

Linux에서 간단히 실행

hdparm --trim-sector-ranges start:count /dev/sda

대신 TRIM하려는 블록 범위 start와 대신 countSSD 장치를 전달합니다 /dev/sda. 속도가 빠르며 드라이브에 0을 쓰지 않는 이점이 있습니다. 오히려 TRIM 명령을 SSD 컨트롤러에 전송하여 해당 블록의 데이터에 신경 쓰지 않으며 가비지 수집 알고리즘에서 사용되지 않는다고 가정 할 수 있습니다.

이 명령을 루트로 실행해야합니다. 이 명령은 큰 데이터 손실을 즉시 유발할 수 있으므로 매우 위험하므로 --please-destroy-my-drive인수를 전달해야 합니다 hdparm(복사 및 붙여 넣기로 인한 우발적 인 데이터 손실을 방지하기 위해 명령 행에 추가하지 않았습니다).

위의 명령 줄에서 /dev/sdaTRIM 명령을 보내려는 SSD 장치로 교체해야합니다. startTRIM에 대한 첫 번째 블록 (섹터)의 주소이며 count해당 시작 주소에서 해제 된 것으로 표시 할 블록 수입니다. 여러 범위를 명령에 전달할 수 있습니다.

128GB Crucial RealSSD C300이있는 랩톱의 Ubuntu 11.04에서 hdparm v9.32로 개인적으로 수행 한 후 문제를 지적해야합니다. 전체 디스크 블록 수 (0 : 250069680)를 범위로 전달할 수 없었습니다. . 수동으로 (필수적으로 "이진 검색") 수동으로 작동하는 블록 수 (40000)에 대해 충분히 큰 값을 찾았으며 40000 범위의 시퀀스에서 TRIM 명령을 실행하여 전체 디스크를 비울 수있었습니다. 다음과 같은 간단한 쉘 스크립트를 사용하면 가능합니다 (루트 아래 우분투 11.04에서 테스트) :

 # fdisk -lu /dev/sda

 Disk /dev/sda: 128.0 GB, 128035676160 bytes
 255 heads, 63 sectors/track, 15566 cylinders, total 250069680 sectors
 ...  

전체 드라이브를 지우려면 총 섹터 수를 취하고 다음 줄에서 250069680을 해당 숫자로 바꾸고 실행하십시오 ( --please-destroy-my-drive) :

 # i=0; while [ $i -lt 250069680 ]; do echo $i:40000; i=$(((i+40000))); done \
 | hdparm --trim-sector-ranges-stdin /dev/sda

그리고 당신은 끝났습니다! hexedit /dev/sda전후에 디스크의 원시 내용을 읽어 보고 드라이브가 데이터를 삭제했는지 확인할 수 있습니다.


물론 Linux를 시스템의 기본 OS로 사용하지 않더라도 라이브 CD를 부팅하고 드라이브에서 실행하여이 트릭을 활용할 수 있습니다.


3
글쓰기는 좋지만 불행히도 SSD를 지원하는 비 Trim에서는 작동하지 않습니다. 이를 위해서는 조금 더 나아가 야합니다. hdparm을 사용하는 방법에 대한 지침 은 kernel.orgATA 위키를 참조하십시오 . 이 정보를 포함하도록 원래 항목을 수정할 수 있다면 더욱 좋습니다. :)
James

"fstrim"은 위의 간단한 버전입니다 (별도의 답변 참조).
Bryce

@Bryce, 잘못된; TRIM은 권 고용이며 보안이 아닌 성능상의 이유로 의도 된 것이므로 드라이브는 대부분의 드라이브와 마찬가지로 명령을 무시하거나 나중에 지연을 지연시킬 수 있습니다.
psusi

24

먼저 성능 저하의 원인을 이해하는 것으로 시작하겠습니다. 이것을 알지 못하면 많은 사람들이 부적절한 해결책을 제안 할 것입니다 (이미 일어나고있는 것처럼). 이 전체 곤경의 요점은 기본적으로 Wikipedia 에서 인용 한 것처럼 다음 사실로 귀착됩니다 . 그것을 기억하십시오, 그것은 중요합니다 :

NAND 플래시 메모리를 사용하면 읽기 및 프로그래밍 작업을 한 번에 한 페이지 씩 수행해야하며 잠금 해제 및 지우기는 블록 단위 방식으로 수행해야합니다.

SSD는 NAND 플래시로 구성되며 플래시는 "블록"으로 구성됩니다. 각 블록은 많은 "페이지"를 포함합니다. 간단하게하기 위해 방대한 단일 메모리 블록이 포함 된 반짝이는 새로운 SSD를 구입했으며 그 블록이 4 개의 빈 페이지로 구성되어 있다고 가정 해 봅시다.

명확성을 기하기 위해 빈 페이지, 사용 된 페이지 및 삭제 된 페이지를 ∅, 1 및 X 로 구분합니다. 컨트롤러 관점에서 이들 각각의 차이점있다는 것이 핵심 입니다! 1과 0만큼 간단하지 않습니다. 따라서, 새로운 드라이브의 페이지는 다음과 같습니다.

∅, ∅, ∅, ∅ (모두 비어 있음)

이제 드라이브에 데이터를 쓰면 첫 페이지에 저장됩니다.

1, ∅, ∅, ∅

다음으로 우리는 조금 더 많은 데이터를 작성합니다. 이번에는 두 페이지가 필요하므로 두 번째와 세 번째 페이지에 저장됩니다.

1, 1, 1, ∅

공간이 부족합니다! 우리는 우리가 작성한 초기 데이터가 실제로 필요하지 않다고 결정하므로 삭제하기 위해 삭제하십시오. :

X, 1, 1, ∅

마지막으로, 나머지 두 페이지를 소비 할 저장해야 할 또 다른 대규모 데이터 집합이 있습니다. 이것은 트림없이 드라이브에서 성능이 발휘되는 곳입니다 !! 마지막 상태에서 이것으로

1, 1, 1, 1

... 대부분의 사람들이 알고있는 것보다 더 많은 작업이 필요합니다. 다시 말하지만 이는 플래시가 페이지 단위가 아닌 블록 단위 방식으로 만 지워질 수 있기 때문입니다. 이는 위의 최종 전환이 요구하는 것입니다. TRIM과 비 TRIM 기반 SSD의 차이점 은 다음 작업을 수행 할 때 입니다.

빈 페이지와 삭제 된 페이지를 사용해야하므로 SSD는 먼저 전체 블록의 내용을 일부 외부 저장소 / 메모리로 읽고 원본 블록을 지우고 내용을 수정 한 다음 해당 내용을 다시 기록해야합니다. 블록. "쓰기"만큼 간단하지 않고 이제 "읽기-지우기-쓰기"가됩니다. 이것은 큰 변화이며, 많은 양의 데이터를 쓰는 동안 일어날 수있는 일은 아마도 그것이 일어날 수있는 가장 부적절한 시간 일 것입니다. 해당 "삭제 된"페이지가 미리 복구 된 경우이를 방지 할 수 있습니다. 바로 TRIM의 의도입니다. TRIM을 사용하면 SSD는 삭제 직후 또는 삭제 된 페이지가 TRIM 알고리즘으로 적절하다고 판단 될 때 삭제 된 페이지를 복구합니다. 중요한 부분은 TRIM을 사용하면 쓰기 도중에 발생하지 않는다는 것입니다.

TRIM이 없으면 드라이브로 데이터를 채울 때 위의 시나리오를 피할 수 없습니다. 고맙게도 일부 최신 SSD는 TRIM을 뛰어 넘고 필요한 ATA 명령 (일부 가비지 수집이라고 함)없이 하드웨어 수준에서 백그라운드에서 TRIM과 동일한 작업을 효과적으로 수행합니다. 그러나 운이 좋지 않은 사람들에게는 전체 드라이브에 0을 쓰는 것이 원래 성능을 되찾기에 충분하지 않다는 것을 아는 것이 중요합니다 !! 드라이브에 0을 모두 쓰더라도 플래시의 페이지에 쓸 수 있음을 컨트롤러에 표시하지 않습니다. TRIM을 지원하지 않는 드라이브에서이를 수행하는 유일한 방법은 Wayback Machine을 통해 HDDErase 와 같은 도구를 사용하여 드라이브에서 ATA 보안 지우기 명령을 호출하는 것 입니다.

나는 생각 만 삭제 파티션에 또는 Windows 7의 "diskpart를 모두 깨끗한", 그리고 개별 파일의 삭제시 같은 것들에 TRIM을 지원하는 일부 초기 SSD의의가 있었다. 오래된 드라이브가 해당 명령을 실행할 때 성능을 회복하는 것처럼 보이는 이유 일 수 있습니다. 그래도 조금 흐릿 해 보입니다 ...

SSD 및 하드웨어 / 가제트에 대한 내 지식의 대부분은 anandtech.com 에서 온 것 입니다. 나는 그가이 모든 것을 설명하는 대단한 글을 썼다고 생각했지만 내 인생을 위해 나는 그것을 찾을 수 없다!



ATA의 보안 지우기와 블록 당 및 페이지 당 인용을 언급하면 ​​+1 만 감추고 있습니다.
Christopher Galpin

1
이 답변의 대부분은 정확하지만 가비지 수집에 대한 부분은 올바르지 않습니다. 모든 SSD에는 가비지 수집이 있습니다. 그것 없이는 작동하지 않을 것입니다. 가비지 콜렉션은 TRIM의 대안이 아닙니다. 비어있는 상태에서 NAND 셀은 1을 나타내고 0에 쓸 수 있습니다. 그러나 0으로 되돌리려면 한 번에 전체 블록을 지워야합니다. 따라서 기존 데이터를 덮어 쓰는 대신 변경 내용이 새 블록에 기록되고 이전 데이터는 유효하지 않은 것으로 표시됩니다. 잘못된 데이터를 지우는 것은 가비지 수집입니다. TRIM은 OS에서 데이터를 삭제할 때 SSD에 데이터를 유효하지 않은 것으로 표시하도록 지시합니다.
Mr Alpha

미스터 알파는 아닙니다. "가비지 수집"이라는 용어는 컨트롤러가 필요 로 할 때 단순히 반응하는 대신 단순히 최적의 시간에 설명하는 프로세스를 능동적으로 수행하는 컨트롤러에서 비롯된 것입니다 (드라이브가 가득 차면 성능이 저하됨).
제임스

1
어쩌면 우리는 결코 그것을 "가비지 수집"이라고 부르지 말고 대신에 구형의 반응성 컨트롤러 "보더"라고 별명을 붙였습니다.
제임스

17

분명히 표준 권장 사항은 모든 0을 전체 드라이브로 작성하는 것입니다. 나는 아니에요 완전히 이 (쓰기의 많은 결국 SSD를 죽이지 않는다?)하는 데 도움이 확실한 이유가 있지만 주요 공급 업체의 SSD 지원 포럼에 의해 승인 될 것처럼 보인다.

그래서 Windows에서 그렇게하려면 :

  • 관리자 권한으로 명령 프롬프트를 시작하십시오.
  • 명령을 실행 diskpart

유틸리티에 들어가면 DISKPART>프롬프트가 표시되고 다음 명령을 실행하십시오.

DISKPART> list disk
DISKPART> select disk x

물론, 올바른 SSD 드라이브를 선택했는지 확인 하기 전에!

DISKPART> clean all
DISKPART> create partition primary
DISKPART> format quick fs=NTFS 

마법은 여기 clean all있는 드라이브에 모두 0을 기록한다 :

all 매개 변수를 지정하면 각 섹터를 모두 0으로 만들 수 있으며 드라이브에 포함 된 모든 데이터를 삭제할 수 있습니다.

이 작업을 수행 한 후 디스크 성능이 크게 향상되었음을 확인할 수 있습니다.


11
@Jeff 모든 제로를 작성하는 것이 도움이 될 수있는 이유는 최근 David Spillett에 의해 설명되었습니다 . 일부 컨트롤러는 제로화 된 블록을 버리고 여유 공간 풀로 되돌려 TRIM 명령의 효과를 모방한다고 가정합니다.
sblair

1
2 포인트-먼저 플래시 지우기 명령은 블록을 모든 0xff로 지우므로 0 대신 쓰는 것이 좋습니다. 그래도 데이터 시트를 확인해야합니다. 두 번째-컨트롤러를 드라이브를 트리밍 (Triming)하려는 경우 드라이브의 모든 블록을 트리밍 한 유틸리티를 실행하는 것이 좋지 않습니까? 개인적으로, 아마도 (0xffs와 TRIM)을 모두 할 것입니다.하지만 아마도 여기에서 약간의 장난이 될 것입니다.
데니스 먼지

2
@dennis 확실히, 그러한 유틸리티가 있다면 나에게 하나를 알려주십시오.
Jeff Atwood

1
@Dennis : 드라이브가 "물리적" "on"비트를 사용하고 비트가 다른 비트에서 논리로 변환 된 경우 0xff가 필요한 패턴 일 수 있습니다. 그들은 거꾸로 된 논리를 사용할 수 있으므로 제조업체와의 문서화 또는 통신은 진행하기 전에 확인하는 유일한 방법입니다. sdelete 또는 이와 유사한 것을 사용하는 제안은 작업중 인 파일 시스템에서 사용되지 않는 블록을 다듬는 것입니다. 물론 SSD 매핑에서 사용 된 것과 사용되지 않은 모든 블록에 대해 트림이 아닌 쓰기가 발생합니다.
David Spillett

2
많은 사람들이 SSD를 안전하게 지우는 것을 알지 못하는 것으로 약간 혼란스러워합니다. 모든 단일 블록을 트리밍 할 필요는 없습니다. SSD에 Secure Erase ATA 명령을 전송하는 유틸리티를 실행하기 만하면 SSD가 TRIM을 지원하는지 여부에 관계없이 문제가 해결됩니다.
제임스

16

또한 SSD Life Pro 도구를 찾았습니다 . 나에게 나쁜 소식이있다.

SSDLife Pro-드라이브 상태가 나쁩니다!

그것을 계산하는 방법에 관해서는 SMART SSD 표시기를 사용합니다. 분명히 SMART 데이터를 기반으로 예측하려고합니다 .

  • SSD가 기반으로하는 플래시 메모리의 수명은 셀당 10,000 개의 쓰기로 제한됩니다
  • 대부분의 드라이브는 또한 SMART 매개 변수에 기록 및 / 또는 판독 정보에 대한 데이터를 표시합니다

추정하기 위해 데이터가 작성된 시점 을 알아야하기 때문에 까다 롭지 만 기본 데이터는 다음과 같습니다.

01 읽기 오류율 7
09 시작 시간 수 7085
0C 전원 사이클 수 318
B8 초기 불량 블록 수 15
C3 프로그램 실패 블록 수 0
C4 지우기 실패 블록 수 0
C5 읽기 실패 블록 수 0
C6 읽기 섹터 5468243171
C7 쓰기 섹터 41640920876
C8 읽기 명령 100482453
C9 쓰기 명령 417315851
플래시의 CA 오류 비트 345270
수정 가능한 비트 오류 340001의 CB 읽기 섹터
CC 불량 블록 전체 플래그 0
CD 최대 P / E 수 사양 5000
CE 최소 지우기 수 3774
CF 최대 지우기 수 65348
D0 평균 지우기 수 4837
D1 잔여 드라이브 수명 4

무서운 숫자 는 4 .. %의 남은 드라이브 수명 입니다 !

그리고 결과 계산 :

모델 : CRUCIAL_CT128M225
크기 : 128GB
일련 번호 : xxxxxxxxxxxxxxxxx456
펌웨어 : 2030
가동 시간 : 318    
드라이브 / OS에서 TRIM 지원 : 활성화 / 활성화
근무 시간 : 9 개월 16 일 5 시간
읽은 총 데이터 : 2607.46 GB
서면 : 19855.94 GB

기록을 위해이 드라이브는 원래 2009 년 10 월에 구입되었으므로 1 년 반이 조금 넘었습니다.


3
@Jeff 플래시 메모리는 프로세스 크기가 향상되었지만 프로그램 / 삭제주기 수가 줄었습니다 . Value 0xCD는 10,000 개가 아닌 5,000 개의 정격 P / E주기를 가진 34nm 기반 드라이브가 있음을 나타냅니다.
sblair

1
@sblair를 아는 것이 좋습니다. 새로운 OCZ Vertex 2에서 도구를 사용해 보았는데 완전히 다른 SMART 필드와 값이 있습니다.
Jeff Atwood

2
그 데이터는 약간 떨어져 보입니다. 읽은 것보다 거의 10 배 많은 데이터를 썼습니다. 소리가 크지 않습니까? 나는 그것보다 더 많은 읽기를 기대할 것입니다. 해당 드라이브에 페이지 파일이 있습니까?
데니스 먼지

1
더 많은 데이터 포인트-아내의 MacBook에 비슷한 SSD가 설치되어 있습니다. 이것은 이전에는 개발 용으로 사용되었던 랩탑이었습니다. 방금 해당 SSD의 통계를 보았으며 드라이브 수명의 8 개월 정도 동안 7085와 비교하여 시간에 총 17의 전원이 공급되었습니다 (295 일). 머신이 총 17 시간 이상 켜져 있다는 사실을 알고 있지만 OS가 적극적으로 드라이브 전원을 끄고있는 것 같습니다.
데니스 먼지

2
128GB 드라이브에 20TB 쓰기!? 이 드라이브를 정확히 무엇을 사용하고 있습니까?
BlueRaja-대니 Pflughoeft

6

드라이브를 통해 0을 쓰는 것이 최선의 방법은 아니라는 것을 알았습니다. 단기적으로 도움이 될 수는 있지만 드라이브가 최대 성능으로 복원되지는 않는다는 것을 알았습니다 (트리밍을 사용하지 않는 오래된 Intel-SSD가 있습니다). 1 ~ 2 년 동안 상당히 많은 사용량을 소비 한 후 SSD를 0으로 설정 한 후에도 SSD 가 모든 파일 에 쓰려고 할 때 1-2 초 동안 멈추기 시작했습니다.

내가 찾은 유일한 것은 성능을 완전히 복원한다는 것은을 사용 하는 안전한 지우기 였습니다 hdparm. SSD가 약간의 딸꾹질을 경험하기 시작할 때마다 6-12 개월마다 SSD를 안전하게 지우는 습관을 들였습니다. Macrumors의 누군가 가 mac * 장비를 사용하는 방법에 대한 Mac 관련 튜토리얼 을 만들었습니다 .

내가 본 모든 주장에 따르면, 보안 지우기는 SSD에 특수 명령을 전송하여 SSD를 사용하여 훨씬 낮은 수준에서 모든 섹터를 0으로 설정합니다 dd.


드라이브가 TRIM을 지원하지 않으면 모든 베팅이 해제됩니다.
Jeff Atwood

1
잘못된 삭제 보안 Jeff는 TRIM과 완전히 독립적입니다. 실제 ATA 명령이며, 비 TRIM 지원 드라이브 를 완전히 복원 하기 위해 수행 할 수있는 유일한 방법 입니다. SSD가이 명령을 수신하면 모든 NAND 셀이 비어있는 것으로 표시되어 TRIM 필요 없이 드라이브의 원래 쓰기 성능 복원합니다 . hdparm을 포함하여이 작업을 수행 할 수있는 수많은 도구가 있습니다.
제임스

5

Mac에서는 digilloydTools DiskTester를 확인하십시오 . 드라이브 성능에 대한 재조정의 영향을 확인할 수있는 흥미로운 데이터 포인트도 있습니다.


나는 그것이 SSD에 매우 큰 0의 파일을 쓰는 것이라고 믿습니다. 를 수행하여 저장 결과를 얻을 수 있습니다 cat /dev/zero > /tmp/bigfile.
Kendall Hopkins


2

(솔리드 스테이트 드라이브) ssd에 남아있는 ssd 수명을 확인하려면 smartmontools 패키지를 설치해야합니다. 최신 ATA 및 SCSI 하드 디스크에 내장 된 SMART (Self-Monitoring, Analysis and Reporting Technology System)를 사용하여 스토리지 시스템을 제어하고 모니터링하는 두 가지 유틸리티 프로그램 (smartctl 및 smartd)이 포함되어 있습니다.

우분투, 민트 또는 데비안 기반 배포판

# apt-get install smartmontools

For Fedora, Centos, or Red Hat based distributions
# yum install smartmontools

Media_Wearout_Indicator가 찾고 있습니다. 100은 ssd의 수명이 100 %임을 의미하고 숫자가 낮을수록 남은 수명이 줄어 듭니다.

# smartctl -a /dev/sda | grep Media_Wearout_Indicator

내 노트북에서 출력

233 Media_Wearout_Indicator 0×0032 100 100 000 Old_age Always – 0

드라이브에서 자세한 내용과 전체 속성을 보려면 다음을 실행하십시오.

# smartctl -data -A /dev/sda

출처 : namhuy.net/1024/how-to-check-ssd-life-left.html


2

@LeakyCode 답변과 비교하여 Linux 시스템에 대한 훨씬 더 나은 답변이 있습니다.

sudo fstrim -v / boot

"util-linx"의 "fstrim"명령은 파일 시스템을 통해 실행되며 사용되지 않은 모든 공간에 대해 TRIM 명령을 실행합니다. Ubuntu와 같은 배포판에서는 Intel 및 Samsung의 "알려진 안전한"드라이브 목록을 제외하고 기본적으로 비활성화되어 있습니다. 그러나 명령은 모든 드라이브의 모든 파티션에서 수동으로 실행할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.