다른 논리적 및 물리적 블록 장치 이름 간의 매핑을 파악할 수 없습니다. “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 ##”사이의 매핑은 어디에 있습니까?
감사
답변
편리 dmsetup ls --tree
하고 유용합니다 lsblk
.
답변
방금 이것에 부딪 쳤으므로 여기에 무엇이 도움이되었는지 문서화하겠습니다.
poise의 답변이 정확 dmsetup ls --tree
합니다. 출력을 해석하는 방법을 알고 있다면 에서 필요한 모든 정보를 얻을 수 있습니다 .
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 번호를 매핑하는 가장 쉬운 방법은 run 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에 다시 매핑됩니다.
답변
좋아, 마침내 알아 냈습니다.
pvscan 명령은 내가 찾고있는 매핑을 제공합니다.
답변
@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
답변
나는 같은 문제를 겪었을 것이다. 아마도 “더 깊은”: 마운트 포인트 수준까지. 관심있는 사람이 있다면, 두 가지 방법 모두를 쿼리하기 위해 내가 사용하는 두 가지 기능이 있습니다.
######## FIND THE LVPATH of an existing FS. Query the lvm using FS' mount point
fileSystem_to_lvPath(){
FS_TO_QUERY=$1
#Call like this: $0 /tmp
#Relevant commands for debug: blkid, lsblk, dmsetup, lvdisplay, lvs
#OLD Solution: DEV_MAPPER=$(df -l --output=source $1 | awk '{print $1}' | cut -d"/" -f 4 | tail -1)
#Find DeviceMapper_MajorMinorNumber for specific fs
DeviceMapper_MajorMinorNumber=$(lsblk --noheadings --output TYPE,MAJ:MIN,MOUNTPOINT | grep -w lvm | grep -w $FS_TO_QUERY | awk '{print $2}')
#VG=$(lvs --noheadings --separator : --options lv_kernel_major,lv_kernel_minor,vg_name,lv_name,lv_path | grep $DeviceMapper_MajorMinorNumber | awk -F : '{print $3}')
#LV=$(lvs --noheadings --separator : --options lv_kernel_major,lv_kernel_minor,vg_name,lv_name,lv_path | grep $DeviceMapper_MajorMinorNumber | awk -F : '{print $4}')
LV_PATH=$(lvs --noheadings --separator : --options lv_kernel_major,lv_kernel_minor,vg_name,lv_name,lv_path | grep $DeviceMapper_MajorMinorNumber | awk -F : '{print $5}')
echo $LV_PATH
#echo "$VG/$LV"
}
그리고 반대 쿼리 :
######## FIND THE FS (and FS' mountpoint) of an existing LVPATH:
lvPath_to_fileSystem(){
LV_PATH=$1
#Call like this: $0 /dev/vg00/opt
#Relevant commands for debug: blkid, lsblk, dmsetup, lvdisplay, lvs
#OLD Solution: DEV_MAPPER=$(df -l --output=source $1 | awk '{print $1}' | cut -d"/" -f 4 | tail -1)
#Find DeviceMapper_MajorMinorNumber for specific lv_path
DeviceMapper_MajorMinorNumber=$(lvs --noheadings --separator : --options lv_kernel_major,lv_kernel_minor,vg_name,lv_name,lv_path | grep $LV_PATH | awk -F : '{print $1":"$2}')
FS=$(lsblk --noheadings --output TYPE,MAJ:MIN,MOUNTPOINT | grep -w lvm | grep -w $DeviceMapper_MajorMinorNumber | awk '{print $3}')
echo $FS
}
답변
사용하십시오 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)
답변
모든 바인딩은 file에 매핑됩니다 /etc/multipath/bindings
. 당신은에서와 같이 여기에 모든 장치의 이름을 바꿀 수 있습니다 /dev/mapper/mpathf
로 /dev/mapper/mpathe
.