VirtualBox 및 SSD의 TRIM 명령 지원


27

인터넷에서이 기능이 작동하지 않는 이유와 왜 몇 달 전에 솔루션을 찾는 데 많은 시간을 보냈지 만 어제 게스트 컴퓨터에 "TRIM 명령 지원"을 사용하는 방법에 대한 팁을 찾았습니다. . 나는 그것을 시도하고 작동하는 것처럼 보인다. 내가 알고 싶은 것은 캐치가 어디에 있는지 또는 이것이 실제로 작동하는지입니다.

출처 :
https://forums.virtualbox.org/viewtopic.php?f=7&t=51768
http://jaysonrowe.blogspot.com/2013/08/compacting-virtualbox-vdi.html

디스크 파일을 첨부하는 정확한 명령 :

VBoxManage 저장소 연결 "GuestOsMachineName"--storagectl "SATA"-포트 1-장치 0-회전 없음 --discard on --medium "C : \ path \ to \ file.vdi"--hdd 유형

머신의 * .vbox 파일에서이 항목을 생성 한 것 :

<AttachedDevice nonrotational="true" discard="true" type="HardDisk" port="1" device="0">
    <Image uuid="{3836a042-a83e-4000-9a59-e95ad65162ce}"/>
</AttachedDevice>

데이터가 손실되지 않도록이 드라이브는 시스템에 연결된 두 번째 드라이브입니다. 일부 파일을 드라이브에 복사하고, 파일을 남겨두고, 컴퓨터를 다시 시작하고, 컴퓨터를 종료하고, 부팅 후 파일이 있는지 확인하고, 호스트 OS의 디스크 파일 사용량을 확인하는 것과 같은 간단한 테스트를 수행했습니다. 결과는 다음과 같습니다

  • 옵션-비 회전 및 --discard없이 첨부 된 디스크 파일은 게스트 OS에서 파일을 삭제 한 후에도 (동적) 크기를 유지합니다
  • 위에서 언급 한 두 가지 옵션이 첨부 된 디스크 파일은 데이터가 삭제 된 후 공간을 해제합니다

이제 내 질문이 있습니다 :
-정확히 --discard 옵션은 무엇을합니까? VirtualBox 매뉴얼 ( http://www.virtualbox.org/manual/ch08.html#vboxmanage-storageattach )에 설명되어 있지 않습니다.
실제로 TRIM을 호스트 OS로 전달합니까?


3
가상 컴퓨터에서 사용되는 가상 TRIM은 ... 가상 스위트 니스의 가상 디스크 인터페이스
큰 실수 연구소를

Ramhound : 스토리지 하위 메뉴의 "Solid-state drive"확인란 옵션은 무엇입니까? 게다가, 매뉴얼에 언급 된 --discard와 같은 옵션이 있다면, 자세한 설명이 필요합니다. 나는 "설명되지 않은 이유가있다"고 말하는 것을 완전히 이해하지 못한다. 그렇다면 왜 매뉴얼에 포함되어 있습니까?
Krzysztof Szynter

11
@Ramhound에 대답하기 위해 내 블로그는 OP가 나열된 게시물 중 하나입니다. 그의 이유가 무엇인지 잘 모르겠지만 동적으로 할당 된 디스크의 파일 크기를 물리적으로 줄여야하는 가상 머신이있었습니다. 디스크는 삭제 된 데이터를 보유한 디스크 였고 더 작은 크기로 축소하려고 시도했습니다 .TRIM 명령을 통과하면 가상 디스크가 12G에서 7G로 축소되었습니다. OP에, 내 게시물이 도움이 되었기를 바랍니다. 내 블로그에서 들어오는 트래픽을보고 여기에 도착했습니다.
Jayson Rowe

주제에 관심이있는 사람에게만 경고합니다. VirtualBox 디스크 이미지 에뮬레이터의 트리밍 구현은 매우 버그가 많으며 VM을 중단시킬 수 있습니다. 2 년 된 버그가 있습니다. 그것을 가능하게 할 수는 있지만 그것을 시도하는 데 시간을 낭비하지 마십시오.
Dominik SMogor

이것이 Dominik이 말하는 버그라고 생각합니다. virtualbox.org/ticket/16450
bobpaul

답변:


19

--discard옵션 은 게스트 OS의 명령 vdi에 따라 이미지가 축소되도록 지정합니다 trim. 다음 요구 사항이 충족되어야합니다.

  • 디스크 형식은 VDI 여야합니다
  • 비워진 영역은 1MB 이상이어야합니다 (크기)
  • [아마도] 클리어 된 영역은 1MB 이상의 블록을 포함해야합니다 (정렬).

게스트 OS는 trim명령을 실행 하도록 구성되어야합니다 . 일반적으로 게스트 OS는 디스크가 SSD라고 생각합니다. Ext4는 -o discard마운트 플래그를 지원합니다 . OSX는 기본적으로 Apple 제공 SSD 만이 명령을 실행 하므로 추가 설정이 필요할 수 있습니다. Windows는 적어도 버전 7 및 8에서 SSD를 자동으로 감지하고 지원해야합니다. 설치 또는 런타임에 감지가 발생하는지 확실하지 않습니다. Linux exFAT 드라이버 (Samsung 제공) 는 ignore 명령을 지원합니다 . 파일 시스템이 플래시로 시작되도록 설계되었지만 exFAT의 Microsoft 구현이 동일한 것을 지원하는지는 확실하지 않습니다.

또는 패키지의 일부인 trimLinux fstrim명령과 같은 특별한 방법이 util-linux있습니다.

이전 솔루션 zerofree에서는 디스크를 명시 적으로 사용 하고 압축하는 등 사용하지 않는 영역을 제거해야했습니다 (VM이 오프라인 일 때만 가능하다고 가정).


1
또한 btrfs (특히 0 개의 영역에 구멍을 뚫는 것)에 중복 제거 기능을 사용 btrfs balance하면 가능한 많은 트리밍 가능한 영역을 만드는 데 실제로 도움이됩니다.
Omnifarious

12

이것이 Google의 최고 결과이므로이 게시물은 오래된 게시물이지만 다른 답변을 조금 더 명확하게 설명하겠습니다. 게스트 파일 시스템의 사용되지 않은 가상 블록이 플래시를보다 잘 활용하기 위해 사용되지 않는 것으로 표시된 해당 물리적 ​​플래시 블록을 가질 수 있다는 의미에서 TRIM을 작동시킬 수 있습니다. 조각은 이미 다른 답변과 의견에 있습니다.

먼저, 여유 공간이 TRIM되도록 호스트를 설정해야합니다. -o ignore를 사용하여 파일 시스템을 마운트하거나 cron을 통해 파일 시스템에서 fstrim을 정기적으로 실행할 수 있습니다. 첫 번째 옵션은 한 번에 많은 파일을 삭제할 때 시스템이 잠길 수 있으므로 후자를 선호합니다.

사용 된 디스크 형식은 qarma가 쓸 때 VDI 동적 크기 여야합니다.

OP에 설명 된대로 .vbox 파일에 nonrotational = "true"destroy = "true"가 설정되어 있는지 확인하십시오.

그런 다음 게스트 OS에서 TRIM을 정상적으로 활성화하십시오. Linux에서는 fstrim을 실행하는 크론 작업을 다시 권장합니다. 가상 디스크 이미지에서 TRIM을 수행하는 데 드는 비용이 실제 SSD보다 훨씬 높기 때문에 이미지가 더 작게 만들기 위해 데이터가 이동되기 때문에이 방법이 훨씬 더 중요합니다.

이제 디스크 이미지가 정기적으로 압축되기 때문에 실제 사용 된 공간과 qarma가 쓸 때 1MB의 블록 크기 오버 헤드 만 차지합니다. 이는 다시 여유 공간이 호스트 SSD에서 트리밍됨을 의미합니다.


실제로 trim 명령을 사용하여 일부 VM을 종료했습니다.
davidbaumann

@davidbaumann 어떻게 되었습니까?
dvtan

실제로 활성화 한 후 약 20GB가 줄어들 기 시작했습니다. 바로 지금이 순간 랩탑이 추락했습니다 (요즘 GPU에 문제가있었습니다). forums.virtualbox.org/viewtopic.php?f=2&t=75308
davidbaumann

기존의 첫 번째 디스크 (SATA 가정) 에 대해 수행하는 명령 :VBoxManage storageattach $VM --storagectl "SATA Controller" --port 0 --device 0 --nonrotational on --discard on
RobM
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.