논리적 블록 장치 이름과 물리적 블록 장치 이름 간의 매핑

논리적 블록 장치 이름과 물리적 블록 장치 이름 간의 매핑

서로 다른 논리적 블록 장치 이름과 물리적 블록 장치 이름 간의 매핑을 파악할 수 없습니다. "cat /proc/diskstats"의 출력은 다음과 같습니다.

 104    0 cciss/c0d0 ...
 104    1 cciss/c0d0p1 ...
 104    2 cciss/c0d0p2 ...
 104    16 cciss/c0d1 ...
 253    0 dm-0 ...
 253    1 dm-1 ...
 253    2 dm-2 ...
 253    3 dm-3 ...

"df -h"의 출력은 다음과 같습니다.

/dev/cciss/c0d0p1                 99M   39M   56M  42% /boot
/dev/mapper/VolGroup01-LogVol02   908G  760G  103G  89% /home
/dev/mapper/VolGroup01-LogVol03   193G  181G  2.6G  99% /opt
/dev/mapper/VolGroup00-LogVol00   54G   11G   41G  21%  /

"cciss", "dm-#" 및 "VolGroup##" 간의 매핑은 어디서 찾을 수 있나요?

감사해요

답변1

dmsetup ls --tree편리한 것과 실용적인 것이 있습니다 lsblk.

답변2

방금 이 문제에 직면했으므로 여기에 도움이 된 내용을 문서화하겠습니다.

dmsetup ls --treepoise의 대답은 정확합니다. 출력을 해석하는 방법을 안다면 출력에서 ​​필요한 모든 정보를 얻을 수 있습니다.

cciss는 실제 디스크인 장치 이름입니다. 이것매뉴얼 페이지그렇군요. 하지만 관련 부분을 여기에 복사하겠습니다.

   Device nodes
   The device naming scheme is as follows:

   Major numbers:

       104     cciss0
       105     cciss1
       106     cciss2
       105     cciss3
       108     cciss4
       109     cciss5
       110     cciss6
       111     cciss7

   Minor numbers:

       b7 b6 b5 b4 b3 b2 b1 b0
       |----+----| |----+----|
            |           |
            |           +-------- Partition ID (0=wholedev, 1-15 partition)
            |
            +-------------------- Logical Volume number

   The device naming scheme is:

       /dev/cciss/c0d0         Controller 0, disk 0, whole device
       /dev/cciss/c0d0p1       Controller 0, disk 0, partition 1
       /dev/cciss/c0d0p2       Controller 0, disk 0, partition 2
       /dev/cciss/c0d0p3       Controller 0, disk 0, partition 3

       /dev/cciss/c1d1         Controller 1, disk 1, whole device
       /dev/cciss/c1d1p1       Controller 1, disk 1, partition 1
       /dev/cciss/c1d1p2       Controller 1, disk 1, partition 2
       /dev/cciss/c1d1p3       Controller 1, disk 1, partition 3

"dm-#"은 장치 매퍼 번호입니다. DM 번호를 매핑하는 가장 간단한 방법은 을 실행하는 것입니다 lvdisplay. 그러면 논리 볼륨 이름, 해당 볼륨 그룹이 속한 볼륨 그룹 및 블록 장치가 표시됩니다. 블록 장치 줄에서 콜론 뒤에 나열된 값은 DM 번호입니다.

root@centos:/dev > lvdisplay /dev/vg0/opt 
  --- Logical volume ---
  LV Name                /dev/vg0/opt
  VG Name                vg0
  LV UUID                ObffAT-txIn-5Rwy-bW5s-gekn-VLZv-71mDZi
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                1.00 GB
  Current LE             32
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:5

이것은 출력에 잘 매핑됩니다.dmsetup ls --tree

vg0-opt (253:5)
 └─ (104:3)

를 실행하여 DM 번호 매핑을 볼 수도 있습니다 ls -lrt /dev/mapper.

root@centos:/dev > ls -lrt /dev/mapper
total 0
crw------- 1 root root  10, 60 Aug 29  2013 control
brw-rw---- 1 root disk 253,  0 Aug 29  2013 vg0-root
brw-rw---- 1 root disk 253,  1 Aug 29  2013 vg0-usr
brw-rw---- 1 root disk 253,  2 Aug 29  2013 vg0-tmp
brw-rw---- 1 root disk 253,  3 Aug 29  2013 vg0-var
brw-rw---- 1 root disk 253,  4 Aug 29  2013 vg0-home
brw-rw---- 1 root disk 253,  5 Aug 29  2013 vg0-opt

여섯 번째 열에는 DM 번호가 나열됩니다. 따라서 내 서버의 경우 vg0-opt가 /opt에 설치되고 DM-5에 다시 매핑됩니다.

답변3

사용 dmsetup ls --tree -o blkdevname.

[root@redhat7 Packages]# dmsetup ls --tree -o blkdevname
rhel-swap <dm-1> (253:1)
 └─ <sda2> (8:2)
rhel-root <dm-0> (253:0)
 └─ <sda2> (8:2)
oraclevg-oraclelv <dm-2> (253:2)
 └─ <sdb> (8:16)

답변4

@Jon Buys 및 @poige의 답변은 정확하지만 적어도 상대적으로 새로운 커널을 사용하는 시스템에서는 훨씬 더 간단합니다.

의 항목은 의 장치에 대한 소프트 링크 /dev/mapper일 뿐이 므로 필요한 것은 다음과 같습니다.dm-x/dev

ls -l /dev/mapper

예를 들어 내 시스템에서는 다음과 같이 표시됩니다.

# ls -l /dev/mapper/  
total 0
crw-------. 1 root root 10, 236 Dec 12 10:11 control
lrwxrwxrwx. 1 root root       7 Dec 12 10:11 vg_raid10-lv_cache_pool_home_cdata -> ../dm-3
lrwxrwxrwx. 1 root root       7 Dec 12 10:11 vg_raid10-lv_cache_pool_home_cmeta -> ../dm-4
lrwxrwxrwx. 1 root root       7 Dec 12 10:11 vg_raid10-lv_cache_pool_var_cdata -> ../dm-7
lrwxrwxrwx. 1 root root       7 Dec 12 10:11 vg_raid10-lv_cache_pool_var_cmeta -> ../dm-8
lrwxrwxrwx. 1 root root       7 Dec 12 10:11 vg_raid10-lv_home -> ../dm-6
lrwxrwxrwx. 1 root root       7 Dec 12 10:11 vg_raid10-lv_home_corig -> ../dm-5
lrwxrwxrwx. 1 root root       8 Dec 12 10:11 vg_raid10-lv_var -> ../dm-10
lrwxrwxrwx. 1 root root       7 Dec 12 10:11 vg_raid10-lv_var_corig -> ../dm-9
lrwxrwxrwx. 1 root root       7 Dec 12 10:11 vg_ssd-lv_root -> ../dm-0
lrwxrwxrwx. 1 root root       7 Dec 12 10:11 vg_ssd-lv_swap -> ../dm-1
lrwxrwxrwx. 1 root root       8 Dec 27 20:00 vg_ssd_sata-docker--pool -> ../dm-13
lrwxrwxrwx. 1 root root       8 Dec 27 20:00 vg_ssd_sata-docker--pool_tdata -> ../dm-12
lrwxrwxrwx. 1 root root       8 Dec 27 20:00 vg_ssd_sata-docker--pool_tmeta -> ../dm-11
lrwxrwxrwx. 1 root root       7 Dec 27 20:00 vg_ssd_sata-lv_scratch -> ../dm-2
lrwxrwxrwx. 1 root root       8 Dec 27 20:00 vg_ssd_sata-lv_vms -> ../dm-14

도움을 받을 수 없고 ls소프트 링크가 표시되지 않으면 다음을 시도해 보십시오.

for x in /dev/mapper/*; do echo "$(realpath $x) -> $x"; done;

출력은 다음과 유사해야 합니다.

/dev/mapper/control -> /dev/mapper/control
/dev/dm-3 -> /dev/mapper/vg_raid10-lv_cache_pool_home_cdata
/dev/dm-4 -> /dev/mapper/vg_raid10-lv_cache_pool_home_cmeta
...

다음과 같은 특정 매핑을 찾으려는 경우 dm-6:

# (for x in /dev/mapper/*; do echo "$(realpath $x) -> $x"; done;) | grep dm-6
/dev/dm-6 -> /dev/mapper/vg_raid10-lv_home

관련 정보