/dev/sda3
SSD 드라이브의 내 파티션 에는 파일 시스템이 없지만 가비지가 포함되어 있습니다. 전체 파티션에서 TRIM / DISCARD 작업을 어떻게 수행합니까?
/dev/sda3
SSD 드라이브의 내 파티션 에는 파일 시스템이 없지만 가비지가 포함되어 있습니다. 전체 파티션에서 TRIM / DISCARD 작업을 어떻게 수행합니까?
답변:
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를 발행합니다.
blkdiscard
. 에 대해 몰랐습니다 . 위험한 명령 ... :)
WARNING: All data in the discarded region on the device will be lost!
나는이 질문이 꽤 오래되었다는 것을 알고 있지만 ...
이를 수행하는 가장 간단한 방법은 합리적으로 최신 버전의으로 파티션에 ext4 파일 시스템을 만드는 것입니다 mkfs.ext4
. 이 도구의 첫 번째 작업은 전체 파티션을 트리밍하는 것입니다. 이 작업을 마치면 원하는 파일 시스템으로 만든 데이터를 덮어 쓸 수 있습니다.
(예를 들어 SD 카드에 새로운 vfat 파티션을 만들기 위해 방금이 작업을 수행했습니다.)
mkfs.ext4 -J size=4 -N1 /dev/my/device
-E lazy_journal_init
는 쓰기보다 쓰기가 약간 줄어 듭니다 -J size=4
. (물리적 SSD가 아닌 스파 스 파일을 사용한 실험 및 du
작성된 양을 확인 하기위한 실험을 기반으로 함 )
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 (또는 사용하는 부트 로더)을 다시 설치하십시오 . 다른 부트 로더를 모르는 경우가있을 수 있으므로주의하십시오.
wiper.sh
fstrim
더 안전하지만 더 이상 사용되지 않지만이 특정 사용에 대해서는 blkdiscard
두 가지 모두를 능가합니다. 2013 년에는 컴퓨팅 범위를 수동으로 위험에 노출시킬 필요가 없습니다.
wiper.sh
hdparm 패키지에 포함 된 스크립트를 살펴볼 수 있습니다 . --trim-sector-ranges
적어도 ext3 / 4 파일 시스템을 포함하는 경우 hdparm 명령 을 사용하여 파티션의 모든 빈 섹터를 트리밍합니다. 포맷되지 않은 파티션에서 작동하는지 확실하지 않지만 항상 ext4로 임시 포맷 할 수 있습니다.
wiper.sh
하면 ext4 메타 데이터를 제외한 거의 모든 파티션이 트리밍됩니다. 그러나 전체 파티션을 정리하고 싶습니다.
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