lvm을 사용할 때 /dev/dm-0 및 /dev/mapper/control을 어떻게 생성합니까?

lvm을 사용할 때 /dev/dm-0 및 /dev/mapper/control을 어떻게 생성합니까?

AFAIK의 구현은 기본적으로 명령을 통해 커널의 장치 매퍼 메커니즘(모듈)을 사용하여 lvm매핑 테이블을 설정하는 사용자 공간에 있습니다.dm-moddmsetup

이것이 궁극적으로 발생한 일련의 사건이라는 것이 맞습니까 /dev/dm-x?

  • 블록 장치가 온라인 상태가 됩니다.
  • udev파티션에서 블록 장치를 검색하고 파티션의 처음 몇 섹터에서 lvm 볼륨 그룹/논리 볼륨 메타데이터를 식별하는 규칙을 트리거합니다(통과 dmsetup?).
  • 그런 다음 규칙 은 모듈 udev을 로드 dm-mod하고 dmsetup을 호출하여 라는 새 장치를 생성하고 /dev/dm-x위의 메타데이터로 매핑 테이블을 설정합니다.
  • 일부 다른 udev규칙은 다음과 같은 기호 링크를 생성합니다./dev/mapper/vg_name-lv_name

다음은 질문입니다.

  • 모듈을 로드하는 특정 udev규칙은 무엇입니까?dm-mod
  • udev이 파일을 생성하는 특정 규칙은 무엇입니까 /dev/mapper/control?
  • 어떤 특정 udev규칙 /dev/dm-x이 파일을 생성합니까?

나는 그것들이 어디서 왔는지 대략적으로 알고 있지만 ( xx-dm.rules나중에 심볼릭 링크 xx-dm-lvm.rules만 추가하면 됩니다 /dev/vg_name/lv_name), 해당 파일의 어떤 라인이 정확히 이러한 작업을 수행합니까?

답변1

다음을 제외하고 이벤트 순서는 대부분 정확합니다.

  • udevdm_mod, 커널 모듈 로딩을 트리거하지 않습니다 .kmod
  • pvscanLVM과 가장 관련된 udev 규칙은 디스크 및 파티션과 같은 새로운 블록 장치에서 호출이 발생하도록 하는 규칙입니다. 일반적으로 모든 LVM 도구를 포함하고 호출 없이 장치 매퍼와 직접 통신하는 pvscan데 사용되는 단일 다중 호출 바이너리의 일부입니다 .libdevmapperdmsetup
  • LVM 도구 바이너리는 LVM 메타데이터를 읽고 기호 링크 이름을 지정하는 일도 직접 담당하지만 udev링크를 생성하는 실제 작업은 궁극적으로 하위 수준 작업자가 수행합니다.

모듈을 로드하는 특정 udev규칙은 무엇입니까?dm-mod

udev여기서는 다루지 않습니다. 이는 devtmpfs파일 시스템과 하위 시스템에 의해 kmod처리 됩니다. /dev/mapper/control존재하지 않는 장치에 액세스하려고 하면 devtmpfs요청이 보류되고 kmod하위 시스템에 적절한 모듈을 로드하라는 요청이 시작됩니다. 궁극적으로 본질적으로 실행되는 것은 modprobe devname:mapper/control커널 모듈에 정의된 별칭이며, 이는 커널이 설치되거나 시작될 때 커널 모듈 파일의 메타데이터에서 수집됩니다.dm_mod/lib/modules/$(uname -r)/modules.aliasdepmod

모듈이 로드되고 초기화되면(예상 장치 노드가 생성됨) 액세스 시도가 재개되고 장치 노드가 항상 존재했던 것처럼 실행됩니다.

udev이 파일을 생성하는 특정 규칙은 무엇입니까 /dev/mapper/control?

장치 노드에는 udev규칙이 전혀 없을 수도 있고 최종 장치의 권한을 조정하기 위한 일부 배포별 규칙만 있을 수도 있습니다. dm_mod커널 모듈이 초기화 되면 misc_register()커널 기능을 사용하여 장치 노드 생성 프로세스를 시작합니다.커널 코드는 기본 이름과 기타 기본 매개변수를 제공합니다.. 이는 장치 매퍼 하위 시스템을 제어하는 ​​데 사용되는 표준 정적 장치 이름 이므로 /dev/mapper/control일반적으로 기본값을 너무 많이 변경할 이유가 없습니다.

어떤 특정 udev규칙 /dev/dm-x이 파일을 생성합니까?

마찬가지로 udev장치 생성은 시작되지 않습니다. 커널 함수가 호출되면 커널 내의 장치 매퍼 하위 시스템에서 이니셔티브가 제공됩니다 register_blkdev(). 장치 매퍼가 장치를 생성하겠다고 지정하면(지정된 기본 이름 및 기타 기본 속성이 있습니다.), udev요청의 매개변수를 조정하고 다른 작업을 장치 이벤트에 연결한 다음 사용자 공간 mknod()시스템 호출을 사용하여 커널의 요청 + udev 규칙에 따라 장치 노드 생성 요청을 완료할 수만 있습니다.

요청에 udev 규칙이 적용되지 않으면 udev장치 매퍼 커널 코드에서 지정한 기본 이름, 소유권, 권한 및 기타 속성만 사용하여 장치가 생성됩니다. 더 높은 수준의 하위 시스템(예: 여기서는 LVM)이 새 매핑 생성을 요청할 때 이러한 매개변수 중 일부가 더 높은 수준의 하위 시스템에 의해 지정되었을 수 있습니다.

새 장치에 대해 udev 규칙을 얼마든지 생성할 수 있지만 규칙의 매개변수와 일치하는 장치를 등록하기 위해 일부 커널 코드가 호출되지 않는 한 규칙은 유휴 상태로 유지되며 아무 작업도 수행하지 않습니다.

최신 커널 기능을 사용하면 호출자가 장치 이름만 지정할 register_blkdev()수 있습니다 register_chrdev(). 장기적인 목표는 대부분/모든 장치 주/부 번호를 동적으로 할당하고 udev가 모든 권한 할당을 처리하도록 하는 것이기 때문입니다. 그러나 이전 버전에서는 misc_register()전체 장치 구조를 지정할 수 있으므로 정적 주/부 노드 번호 및 기타 속성을 가진 장치를 생성할 수 있습니다.

매스 이펙트 2: 커널 결정을 의역하자면언제장치를 udev결정하십시오 ;어떻게이에 대한 장치 노드를 만듭니다.

관련 정보