dd용 디스크를 선택하는 bash 스크립트(lsblk?)

dd용 디스크를 선택하는 bash 스크립트(lsblk?)

어떤 디스크에 추가해야 할지 선택하는 스크립트를 만들려고 합니다.

옵션을 선택하기 위한 간단한 bash 스크립트는 다음과 같이 작동합니다.

#!/bin/bash
# Bash Menu Script Example

PS3='Please enter your choice: '
options=("Option 1" "Option 2" "Option 3" "Quit")
select opt in "${options[@]}"
do
    case $opt in
        "Option 1")
            echo "you chose choice 1"
            ;;
        "Option 2")
            echo "you chose choice 2"
            ;;
        "Option 3")
            echo "you chose choice $REPLY which is $opt"
            ;;
        "Quit")
            break
            ;;
        *) echo "invalid option $REPLY";;
    esac
done

lsblk내가 아는 가장 좋은 방법은 디스크에서 읽는 것입니다.

lz@vm:~/Downloads$ lsblk 
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0    7:0    0  55,5M  1 loop /snap/core18/1988
loop1    7:1    0   219M  1 loop /snap/gnome-3-34-1804/66
loop2    7:2    0  64,8M  1 loop /snap/gtk-common-themes/1514
loop3    7:3    0 138,5M  1 loop /snap/inkscape/8049
loop4    7:4    0    51M  1 loop /snap/snap-store/518
loop5    7:5    0 162,9M  1 loop /snap/gnome-3-28-1804/145
loop6    7:6    0  31,1M  1 loop /snap/snapd/11036
loop7    7:7    0  32,3M  1 loop /snap/snapd/11107
sda      8:0    1  14,9G  0 disk 
└─sda1   8:1    1  14,9G  0 part 
sr0     11:0    1  1024M  0 rom  
vda    252:0    0   300G  0 disk 
├─vda1 252:1    0   512M  0 part /boot/efi
├─vda2 252:2    0     1K  0 part 
└─vda5 252:5    0 299,5G  0 part /

내 컴퓨터에 나열되지 않은 것을 볼 수 있습니다 df -h./dev/sda

lz@vm:~/Downloads$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            4,5G     0  4,5G   0% /dev
tmpfs           924M  1,6M  922M   1% /run
/dev/vda5       294G   62G  218G  23% /
tmpfs           4,6G   26M  4,5G   1% /dev/shm
tmpfs           5,0M  4,0K  5,0M   1% /run/lock
tmpfs           4,6G     0  4,6G   0% /sys/fs/cgroup
/dev/loop0       56M   56M     0 100% /snap/core18/1988
/dev/loop5      163M  163M     0 100% /snap/gnome-3-28-1804/145
/dev/loop2       65M   65M     0 100% /snap/gtk-common-themes/1514
/dev/loop4       52M   52M     0 100% /snap/snap-store/518
/dev/loop1      219M  219M     0 100% /snap/gnome-3-34-1804/66
/dev/loop7       33M   33M     0 100% /snap/snapd/11107
/dev/loop3      139M  139M     0 100% /snap/inkscape/8049
/dev/loop6       32M   32M     0 100% /snap/snapd/11036
/dev/vda1       511M  4,0K  511M   1% /boot/efi
tmpfs           924M   60K  924M   1% /run/user/1000
/dev/fuse       250G     0  250G   0% /run/user/1000/keybase/kbfs

이유는 모르겠습니다.

/dev/sda1어쨌든, 옵션 목록을 생성하여 하나를 선택하고 dd추가할 수 있도록 이러한 디스크(파티션과 같은 파티션이 아닌 디스크만)를 나열하는 가장 좋은 방법은 무엇입니까 ? bash 스크립트에 삽입할 수 있도록 lsbk로 형식을 지정하는 방법이 있습니까?

또한 시스템이 포함된 디스크에 쓰는 것을 방지할 수 있도록 스크립트가 있는 디스크를 무시하는 것이 좋습니다.

답변1

노력하다lsblk -d

-d, --nodeps장치 랙이나 슬레이브 장치를 인쇄하지 마십시오. (...)

이 명령으로 생성된 테이블을 어떻게 구문 분석할 수 있나요?
lsblk -d | tail -n+2 | cut -d" " -f1

옵션을 입력할 수 있도록 이름과 치수를 수집할 수 있는 방법이 있으면 좋을 것 같습니다.

lsblk -d | tail -n+2 | awk '{print $1" "$4}'

그냥 /dev/NAME이라고 가정해야 할까요?

네, 바로 그 장치가 있는 곳입니다. test -b확인하여 이용하시면 됩니다 .

-b FILE FILE이 존재하고 블록 특수입니다.

if [ -b /dev/vda ]; then
  echo "is a block device"
fi

ls -l /dev/vda장치를 확인하는 데 사용하는 경우 다음으로 시작해야 합니다.b
두번째rw-rw---- 루트 디스크 1개 (...) /dev/vda

lsblk블록 장치는 마지막에 나열되므로 다시 확인할 필요가 없습니다.

관련 정보