Linux의 ext4 + LVM + 소프트웨어 RAID에서 SSD TRIM (discard)을 사용할 수 있습니까?


18

Linux에서 md와 함께 RAID1 + 0 (현재 2.6.37)을 사용하여 md 장치를 만든 다음 LVM을 사용하여 장치 위에 볼륨 관리를 제공 한 다음 ext4를 LVM 볼륨 그룹의 파일 시스템으로 사용합니다.

SSD를 드라이브로 사용하면 TRIM 명령이 계층 (ext4-> LVM-> md-> SSD)을 통해 장치로 전파되는 것을 볼 수 있습니다.

최근 2.6.3x 커널에 더 많은 장치 매퍼 시나리오에 대한 더 많은 적용 범위를 포함하여 새로운 SSD 관련 TRIM 지원이 추가 된 것처럼 보이지만 여전히 제대로 계단식으로 놓일 수는 없습니다.

아직 가능합니까? 그렇다면 어떻게? 그렇지 않다면 어떤 진전이 있습니까?


업데이트 된 serverfault.com/a/229486/67675 참조 :)
poige

답변:


7

불가능합니다. Linux Soft RAID가이를 지원하지 않습니다 (아직?).

UPD. : lkml.org/lkml/2012/3/11/261에 따르면 Wodin 에게 알려 주셔서 감사합니다. 이 기능은 최근 제안 되었습니다. 그러나 제안 된 ! = 수락되었습니다 .


당신은 여전히이 대답을

3
지금은 그렇습니다. lkml.org/lkml/2012/3/11/261
Wodin April

@ Wodin, 3.5에서도 제안 된 변경 사항을 찾을 수 없습니다. 그들은 받아 들여지지 않는 것 같습니다.
poige

14

2.6.37 기준으로 존재해야합니다 ( 소스 ) . 커널은 백그라운드에서이를 수행하지 않으며, 블록 삭제 프로세스는 현재 요청시 실행되도록 설계되었습니다 (크론 스크립트!). DM 암호화 지원은 아직 존재하지 않습니다.

2011 년 1 월 13 일에 패치가 dm-raid1.c 에 병합 되어 다음을 읽습니다.

dm raid1: support discard

Enable discard support in the DM mirror target.
Also change an existing use of 'bvec' to 'addr' in the union.

나는 100 %가 아니지만 2.6.38의 병합 창이라고 생각합니다.

EXT4는 LVM과 마찬가지로 얼마 전에 지원을 추가했습니다. RAID는 지원되지 않는 키입니다. 2011 년 1 월 3 일부로 지원이 추가 된 것으로 보입니다. 2.6.38 또는 2.6.39에서 찾으십시오.


시간이 지났고 TRIM 지원은 3.7 커널에 확실히 포함되어 있습니다. 은 RAID10 읽기 커밋 :

이것은 md raid 10이 TRIM을 지원하게합니다. 한 디스크가 폐기를 지원하고 다른 디스크가 폐기를 지원하거나 다른 디스크가 폐기 _ 제로 _ 데이터를 갖고 있고 다른 디스크가 폐기하지 않은 경우, 해당 디스크의 데이터간에 일치하지 않을 수 있습니다. 그러나 이것은 중요하지 않습니다. 폐기 된 데이터는 쓸모가 없습니다. 그래도 재 구축에 추가 사본이 추가됩니다.


스레드와 관련 커밋을 보았지만 질문에서 언급했듯이 LVM (Device Mapper)뿐만 아니라 md (Software RAID)도 올바르게 통과한다는 의미입니까?
Don MacAskill

1
이것은 유망한 것으로 들리지만 dmraid는 주로 소위 'fakeRAID'하드웨어 RAID 컨트롤러에 사용된다는 것을 알고 있습니다. 내가 말하고있는 것은 LVM이 위에있는보다 일반적인 소프트웨어 전용 mdadm RAID-1 (+0) 배열입니다. AFAIK,이 설정은 dmraid의 새로운 처리 기능을 통해 폐기를 처리하지 못합니다. 권리?
Don MacAskill

1
@DonMacAskill 'raid1.c'파일에는 TRIM, FITRIM 또는 'dispose'를 참조하는 커밋이 없습니다. 따라서 mdadm처럼 보입니다. RAID 지원이 아직 완성되지 않았습니다.
sysadmin1138

@ sysadmin1138 discard리눅스 커널에서 호출되는 것입니다. 그리고 그 패치는 폐기를 의미하는 것 같습니다.
Michael Hampton

1

Mdtrim은 더 많은 작업이 필요할 수 있습니다.

Cyberax-mdtrim-0a40e8d# ./mdtrim.py -m /dev/md4 -s /home
Scratch directory is /home, trimmer file size is 0 GB 790 MB
Found slave sdc2 on /dev/sdc with MD offset 0 and partition offset 249856
Creating trimmer file
252,2: device not found in /dev
Traceback (most recent call last):
  File "./mdtrim.py", line 120, in <module>
    if lines[2].find("assuming %d byte sectors" % sector_size) == -1:
IndexError: list index out of range

0

내 MDTRIM 스크립트 ( https://github.com/Cyberax/mdtrim/ )를 사용하여 ext4 / 3 레벨 -1 RAID의 빈 공간을 트리밍 할 수 있습니다 . 우리는 cron에서 주기적으로 시작하며 우리에게 효과적입니다.

다른 RAID 레벨에 대한 지원을 추가 할 수도 있지만 시간이 필요하지 않습니다.


0

여기에 제안 된대로 사용할 수 있습니다

lsblk -D

블록 장치가 폐기 명령을 통과하는지 확인하십시오.

또한 섹션 참고 장치있어 스캔이 옵션 issue_discards이 포함되어 있습니다. 보다

man 5 lvm.conf

더 많은 정보를 위해서.

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