Não são úteis dmsetup ls --tree
e lsblk
utils.
Não consigo descobrir o mapeamento entre diferentes nomes de dispositivos de blocos lógicos e físicos. A saída de "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 ...
A saída de "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% /
Onde encontro o mapeamento entre "cciss", "dm- #" e "VolGroup ##"?
Obrigado
Não são úteis dmsetup ls --tree
e lsblk
utils.
Eu estava correndo para isso, então vou documentar o que me ajudou aqui.
A resposta de poise está correta, você pode obter todas as informações necessárias de dmsetup ls --tree
, se souber como interpretar a saída.
cciss é o nome do dispositivo, esse é o seu disco atual. A página man explica bem, mas vou copiar a seção relevante aqui:
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
O "dm- #" é o número do mapeador de dispositivos. A maneira mais fácil de mapear números DM é executar lvdisplay
, que mostra o nome do volume lógico, o grupo de volumes a que pertence e o dispositivo de bloco. Na linha "Block device", o valor listado após os dois pontos é o número 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
Que mapeia bem a saída de dmsetup ls --tree
vg0-opt (253:5)
└─ (104:3)
Você também pode ver os mapeamentos de números DM executando 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
A sexta coluna lista o número DM. Então, para o meu servidor, vg0-opt é montado em / opt e mapeia de volta para o DM-5.
Ok, finalmente percebi isso.
O comandopvscan fornece o mapeamento que estou procurando.
Eu tive o mesmo problema, talvez pouco "mais profundo": até o nível do ponto de montagem. Caso alguém esteja interessado, aqui estão duas funções que estou usando, para consultar as duas maneiras.
######## 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"
}
e a consulta inversa:
######## 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
}
As respostas de @Jon Buys e @poige estão corretas, mas pelo menos em sistemas com um kernel relativamente recente, é ainda mais simples.
As entradas em /dev/mapper
são simplesmente links apontando para o dispositivo dm-x
em /dev
, então tudo que você precisa é:
ls -l /dev/mapper
Por exemplo, no meu sistema, isso mostra:
# 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
Se o ls
não for de ajuda e não mostrar os links, tente o seguinte:
for x in /dev/mapper/*; do echo "$(realpath $x) -> $x"; done;
que deve produzir algo como:
/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
...
e se você quiser encontrar um mapeamento específico, 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
Todas as ligações são mapeadas no arquivo /etc/multipath/bindings
. Você pode renomear
aqui qualquer dispositivo como de /dev/mapper/mpathf
a /dev/mapper/mpathe
.
Tags lvm block-device