USB 드라이브의 안전하지 않은 제거로 인한 데이터 손상과 관련된 몇 가지 테스트를 수행하고 있지만 특정 시간에 드라이브를 일관되게 제거할 수 있는 방법이 필요합니다. 버퍼나 캐시를 플러시하지 않고 드라이브를 물리적으로 끌어오는 것과 동일한 명령이 있습니까?
답변1
일부(몇몇) USB 허브에는 포트 전원 제어를 위한 하드웨어 지원이 있습니다. 운이 좋게도 이를 수행하는 포트가 있는 경우 개별 포트의 전원을 끄고 해당 포트에 연결된 장치 제거를 시뮬레이션할 수 있습니다.
이 기능을 제어할 수 있는 프로그램의 소스 코드는 다음 저장소를 참조하세요.https://github.com/codazoda/hub-ctrl.c
답변2
이러한 유형의 연구에서는 블록 장치 에뮬레이터가 실제 USB 장치보다 더 잘 작동할 수 있습니다.
가상 블록 장치를 설정하고, 여기에 파일 시스템을 생성하고, 여기에 일부 파일을 복사하거나 다른 쓰기 활동을 수행하고, 장치의 무작위 스냅샷을 찍는 것이 가능해야 합니다.
중요한 점은 쓰기가 진행되는 동안 장치를 읽는 대신 장치에 들어가서 고정한 다음 스냅샷을 찍어야 한다는 것입니다.
장치의 쓰기 속도를 제한할 수 있으면 도움이 될 수도 있습니다.
일부 파일 시스템 작성자는 이러한 손상에 대한 테스트벤치를 만들었을 수 있습니다. (@Austin Hemmelgam에게 감사드립니다)dm_log_writes장치 매퍼 구성 요소는 가상 블록 장치를 넘어 쓰기 스트림을 제공합니다. 이 스트림을 모든 지점에서 쉽게 잘라서 재생하여 손상된 파일 시스템을 얻을 수 있습니다.
답변3
(DIY) 하드웨어 솔루션은 프로그래밍 방식으로 USB 연장 케이블의 5V 라인에 스위치를 배치하는 것입니다. 나는 다음을 사용할 것이다:
- 1-2비트 하드웨어 IO(USB-232 어댑터의 상태 라인)가 필요할 때 일반적인 트릭을 사용하여 5V 코일 전압을 사용하는 상시 폐쇄형 리드 릴레이입니다. 거의 모든 프로그래밍 언어로 쉽게 작성할 수 있습니다.
- 광절연체(내가 사용하는 것)이 프로젝트는 카메라 출시에 관한 것입니다.(이 회로는 쉽게 적응할 수 있습니다.) USB 스틱이 끌어오는 전류를 처리하지 못할 수도 있습니다.