Linux에서 전체 SSD 파티션을 트리밍 / 삭제하는 방법은 무엇입니까?


28

/dev/sda3SSD 드라이브의 내 파티션 에는 파일 시스템이 없지만 가비지가 포함되어 있습니다. 전체 파티션에서 TRIM / DISCARD 작업을 어떻게 수행합니까?


7
요점은 데이터를 쓰고 싶지 않다는 것입니다. SSD는 플래시 블록을 지우고 SSD 드라이브를 새로 고치는 것으로 알려진 쓰기가 가능하도록 비워 둡니다.
크리스 톰슨


@joe : ATA Secure Erase (ATA 보안 지우기) 링크는 심지어 마비도 언급하지 않습니다. 전체 드라이브를 지우고 싶지 않고 파티션 만 삭제하고 싶습니다. 그리고 실수로 전체 드라이브를 지우는 위험을 감수하고 싶지 않습니다.
pts

11
@Doc : 가비지 데이터로 파티션을 채우는 것은 pts의 의도와는 정반대입니다. SSD에 파티션이 완전히 채워져 있음을 알려줍니다. 이렇게하면 SSD의 성능과 수명이 줄어 듭니다.
Black

답변:


40

util-linux 버전이 충분히 새롭다면 (2012 년 9 월) 실제로 목적에 맞는 도구 blkdiscard가 있습니다. 이것이 최선의 방법입니다.

sudo blkdiscard /dev/sda3

나이가 리눅스 배포판 버전에 대한 호환성을 필요로하지만, 경우가 있습니다 ... 읽어 hdparm/ wiper.sh이 파티션 아니기 때문에 우리가 그 이상으로 뭔가가 필요하므로 쓰레기가 볼륨을 만지지가.

내가 찾은 가장 지원되는 방법은 Linux 스왑 볼륨이 활성화 될 때 DISCARD를 지원한다는 사실을 이용하는 것입니다. 마지막에 와이프가 있으므로 볼륨이 나중에 스왑으로 인식되지 않습니다.

D=/dev/sda3 ; mkswap $D && swapon -d $D && swapoff $D && wipefs -o 0xff6 $D

이것은 대부분의 장치에서 DISCARD를 발행합니다.


1
감사합니다 blkdiscard. 에 대해 몰랐습니다 . 위험한 명령 ... :)
frostschutz

왜? 방금 매뉴얼에서 찾아 보았습니다.WARNING: All data in the discarded region on the device will be lost!
MrCalvin

9

나는이 질문이 꽤 오래되었다는 것을 알고 있지만 ...

이를 수행하는 가장 간단한 방법은 합리적으로 최신 버전의으로 파티션에 ext4 파일 시스템을 만드는 것입니다 mkfs.ext4. 이 도구의 첫 번째 작업은 전체 파티션을 트리밍하는 것입니다. 이 작업을 마치면 원하는 파일 시스템으로 만든 데이터를 덮어 쓸 수 있습니다.

(예를 들어 SD 카드에 새로운 vfat 파티션을 만들기 위해 방금이 작업을 수행했습니다.)


팁 주셔서 감사합니다! 참고 TRIMming 후 빈 ext4 파일 시스템에 대한 메타 데이터로 일부 블록을 작성하므로 파티션의 몇 퍼센트가 트리밍되지 않은 상태로 유지됩니다.
pts

4
@pts 저널 크기와 inode 수를 줄임으로써 메타 데이터의 크기를 최소화 할 수 있습니다.mkfs.ext4 -J size=4 -N1 /dev/my/device
Aryeh Leib Taurog

2
@AryehLeibTaurog Using -E lazy_journal_init는 쓰기보다 쓰기가 약간 줄어 듭니다 -J size=4. (물리적 SSD가 아닌 스파 스 파일을 사용한 실험 및 du작성된 양을 확인 하기위한 실험을 기반으로 함 )
kasperd

@kasperd 재미있는 결과를 가진 영리한 실험! 감사.
Aryeh Leib Taurog

8

hdparm --trim-sector-ranges는 낮은 수준이므로 SSD와 직접 통신해야하므로 파일 시스템에 의존하지 않습니다. wiper.sh는 파일 시스템 특정 프로그램을 사용하여 사용 가능한 (파일 시스템) 영역을 (하드웨어) SSD 섹터에 매핑하고 hdparm을 사용하여 트리밍합니다.

질문에 대답하면 hdparm을 사용하여 해당 파티션을 다듬을 수 있지만 매우 조심 해야합니다 . 이를 수행하는 방법은 파티션에서 사용하는 섹터 범위를 얻은 다음 해당 섹터 범위에서 hdparm을 사용하는 것입니다. --trim-sector-ranges의 각 범위는 최대 65535 개의 섹터를 가질 수 있으므로 아마도 여러 섹터 범위를 통과해야 할 것입니다.

fdisk -l은 파티션의 시작과 크기를 알려줍니다. fdisk에서 사용중인 장치 및 SSD의 섹터 크기에주의하십시오.

예 (내 SSD) :

Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    39070079    19534016   83  Linux

이 파티션 이전의 공간을 버리기 위해 섹터 1에서 시작하여 2047 (SSS에서 512 바이트 크기) 섹터를 트리밍 할 수 hdparm --trim-sector-ranges 1:2047있습니다. 섹터 0부터 시작하여 트리밍 할 수 없습니다. 왜냐하면 그것이 MBR이기 때문입니다 (GPT에 대한 방법은 모르겠습니다).

파티션이 사용하는 공간을 버리려면 할 것 hdparm --trim-sector-ranges 2048:65535 67583:65535 133118:65535 ...입니다. 스크립트를 작성할 수는 있지만 지금은 쓰지 않겠습니다.

또한 확실하게 : 나는 여기에 아무것도 보장하지 않습니다. 계산이 잘못되어있을 수 있습니다. --trim-sector-ranges를 효과적으로 사용하기 전에 모든 것을 백업하십시오.

참고 : 첫 번째 파티션 전에 "빈"공간을 다듬은 경우 GRUB은 첫 번째 파티션 전에 "사용하지 않은"섹터에 일부를 저장하므로 재부팅하기 전에 GRUB (또는 사용하는 부트 로더)을 다시 설치하십시오 . 다른 부트 로더를 모르는 경우가있을 수 있으므로주의하십시오.


7
wiper.shfstrim더 안전하지만 더 이상 사용되지 않지만이 특정 사용에 대해서는 blkdiscard두 가지 모두를 능가합니다. 2013 년에는 컴퓨팅 범위를 수동으로 위험에 노출시킬 필요가 없습니다.
가브리엘

6

wiper.shhdparm 패키지에 포함 된 스크립트를 살펴볼 수 있습니다 . --trim-sector-ranges적어도 ext3 / 4 파일 시스템을 포함하는 경우 hdparm 명령 을 사용하여 파티션의 모든 빈 섹터를 트리밍합니다. 포맷되지 않은 파티션에서 작동하는지 확실하지 않지만 항상 ext4로 임시 포맷 할 수 있습니다.


ext4로 포맷 한 다음 실행 wiper.sh하면 ext4 메타 데이터를 제외한 거의 모든 파티션이 트리밍됩니다. 그러나 전체 파티션을 정리하고 싶습니다.
pts

2
@ pts : wiper.sh 코드를보고 트림 범위를 추론하는 방법을 알아 내려고 제안합니다. 그런 다음 트림 범위를 hdparm으로 수동으로 보내 전체 파티션을 트리밍 할 수 있습니다.
Jaap Eldering

4

blkdiscard전체 드라이브뿐만 아니라 파티션에서도 작동 할 수 있습니다. Fedora 20에서 성공적으로 테스트했습니다. 소스를 확인했습니다 blkdiscard. 파티션에 대해서는 전혀 모르는 매우 간단한 프로그램입니다. 커널이 번역을 수행한다고 가정합니다.

매우주의하고 blkdiscard질문하지 않으며 진행 정보를 표시하지 않습니다.

blkdiscard를 사용할 수없는 경우이 스크립트를 사용하여 출력을 hdparm에 공급하십시오. 첫 번째 인수는 다듬을 섹터 수이고, 두 번째 인수는 다듬을 첫 번째 섹터입니다.

#! /bin/sh
# List ranges for hdparm --trim-sector-ranges-stdin
: ${MAXSECT=65535}
test $# = 2 || { echo "Usage: trimlist sectors offset" >&2; exit 1; }
sectors=$1
pos=$2
while test $sectors -gt 0; do
    if test $sectors -gt $MAXSECT; then
            size=$MAXSECT
    else
            size=$sectors
    fi
    echo $pos:$size
    sectors=$(($sectors-$size))
    pos=$(($pos+$size))
done

-1

다음은 HDDErase를 사용하여 SSD의 내장 보안 지우기 기능을 호출하는 방법에 대한 흥미로운 기사입니다.

http://www.windowsitpro.com/article/file-systems/q-how-can-i-reset-a-solid-state-disk-ssd-to-a-fully-erased-clean-state-


답을 주셔서 감사하지만 1) 전체 드라이브가 지워지기 때문에 2) Microsoft Windows가 필요하고 Linux 솔루션을 찾고 있었기 때문에 작동하지 않습니다.
pts

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