이 losetup
명령을 사용하면 일반 파일을 가상 블록 장치로 변환할 수 있습니다. 그런 다음 다른 장치처럼 파티션을 나누고 포맷할 수 있습니다.
Linux에서 이 "장치"가 4K 논리 섹터 크기를 가지고 있는 것처럼 보이게 하는 방법이 있습니까?
답변1
fdisk
여러 스위치가 있습니다:
-b 섹터 크기
디스크의 섹터 크기를 지정합니다. 유효한 값은 512, 1024, 2048 또는 4096입니다. (최근 커널은 섹터 크기를 알고 있습니다. 이전 커널에서만 이 값을 사용하거나 커널의 아이디어를 재정의합니다.) util-linux-2.17부터 fdisk는 논리적 섹터 크기와 물리적 섹터 크기를 구별합니다. 이 옵션은 두 섹터 크기를 섹터 크기로 변경합니다.
-C링
디스크의 실린더 수를 지정합니다. 왜 누군가가 이것을하고 싶어하는지 모르겠습니다.
-H 헤더
디스크의 헤드 수를 지정합니다. (물론 물리적인 숫자는 아니고 파티션 테이블에 사용된 숫자입니다.) 합리적인 값은 255, 16 입니다.
이건 내가 편집한 게 아니다("왜 누군가가 그런 일을 하고 싶어하는지 모르겠습니다."). 다소 좋은 사람들은 당시에는 사용하지 않았던 기능을 포함합니다.
답변2
예, 가능합니다. 실행하면
losetup --help
이 옵션이 표시됩니다.
-b, --sector-size
direct-IO
루프 블록 장치에서도 옵션을 사용하여 테스트하는 것이 좋습니다.
루프 장치를 만드는 방법은 다음과 같습니다.
losetup --sector-size 4096 --direct-io=on $loop_device $diskfile
하지만 아마도 귀하의 경우에는 그것만으로도 --sector-size 4096
충분할 것입니다.
그런 다음 다음을 사용하여 루프 장치를 표시할 수 있습니다 losetup -l
.
NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC
/dev/loop4000 0 0 0 0 /mnt/fbx/FBX-24T/testspeed2 1 4096
/dev/loop3000 0 0 0 0 /mnt/fbx/FBX-24T/testspeed 1 4096
4K 블록 섹터에 유의하세요.
또한 현재 섹터 크기를 512에서 4096까지 지정할 수 있지만 예를 들어 8K 섹터(8192)를 사용할 수 없으며 losetup
4096보다 큰 섹터 크기를 사용하려고 하면 명령이 실패합니다.
이것이 바로 direct-IO
옵션 사용을 권장하는 이유입니다. --direct-io=on
루프 장치를 생성하는 데 사용된 기본 파일 위에 4K 섹터 형식 파일 시스템이 있는 경우( losetup -P
또는 losetup --partscan
옵션 참조), 이 direct-IO
옵션을 사용하면 IO를 블록 장치에 직접 전송하여 커널 저장소 스택 작업 대기열을 우회합니다.
이는 블록 장치와 기록 중인 파일 시스템의 일관성(정렬)을 유지하는 데 도움이 됩니다.
또한 CIFS 공유에 호스팅된 LUKS 파일에서 루프 장치를 생성하는 경우 (LUKS = Linux 통합 키 설정, Cryptsetup
블록 장치와 해당 호스팅 간이라고도 함) 와 같은 경우에 8~10배 더 나은 성능을 제공합니다. 사이) 파일 시스템)
답변3
수준은 낮지 않습니다. 포맷할 때 특정 블록 크기를 사용해야 한다고 일부 mkfs 스케줄링 유틸리티에 지시하는 것은 확실히 가능합니다. mkfs.*
자세한 내용은 특정 도구의 매뉴얼 페이지를 참조하십시오.
답변4
최신 lossup에는 다음 기능이 있어야 합니다.https://github.com/karelzak/util-linux/commit/a1a41597bfd55e709024bd91aaf024159362679c