Como localizar um ou mais discos subjacentes quando você conhece apenas um diretório?

2

Suponha que eu tenha algum dispositivo montado em /backups . Estou copiando arquivos selecionados do sistema para backup e gostaria de reduzir a quantidade de ruído que o dispositivo está fazendo. Eu sei que posso usar hdparm -M para ajustar a configuração do dispositivo "Automatic Acoustic Management (AAM)". No entanto, não sei como devo obter o dispositivo (por exemplo, /dev/sdc ) de um determinado diretório (por exemplo, se eu tivesse um script que calculasse o local de backup mais recente como /backups/2017/12/31 ).

O melhor que posso fazer é

echo /dev/$(lsblk -no pkname $(findmnt -nvoSOURCE -T "$DIRECTORY"))

mas isso requer codificação /dev/ prefixo e assume que há apenas um disco de apoio. Como tornar isso mais estável?

Note que esta questão é especificamente sobre como localizar o (s) disco (s) correto (s), não a partição. Caso você só precise encontrar a partição correta df ou findmnt será suficiente.

Observe também que, caso um diretório seja montado em md device, o dispositivo pai será algo como md0 , que não pode ser usado com hdparm . Nesse caso, haverá mais de um disco subjacente, portanto, na realidade, essa questão é sobre o mapeamento de um único arquivo ou diretório para um ou mais discos.

    
por Mikko Rantalainen 02.01.2018 / 10:40

2 respostas

2

Esse tipo de script parece ser mais estável (funciona com discos SATA simples e invasões de software):

 lsblk --list -no type,name --inverse $(findmnt -nvoSOURCE -T "$DIRECTORY") \
 | grep ^disk | awk '{ print $2 }' | sort -u \
 | while read name; do echo "Data on /dev/$name"; done

Claro, substitua o comando echo pela ação real que você deseja executar para cada disco.

Exemplo de saída para o diretório em um ataque do software MD de 4 discos:

Data on /dev/sda
Data on /dev/sdb
Data on /dev/sdc
Data on /dev/sdd

Exemplo de saída para o diretório na partição regular de 1 disco:

Data on /dev/sdf
    
por 02.02.2018 / 10:33
0

Uma maneira simples de saber é o uso de df invocado com o caminho (absoluto) da sua pasta:

$ df $DIRECTORY
file system    1K-blocks used     available used% mounted at
/dev/sda1      303538544 74465700 213630924   26% /root/of/variable/DIRECTORY
    
por 02.01.2018 / 12:52