운영 체제가 있는 디스크(파티션 아님)를 자동으로 식별하려고 하면 프로그램이 많은 추가 디스크를 포맷합니다(실수로 운영 체제 디스크를 포맷하지 않도록).
현재 사용 중이지만 dmidecode -s system-uuid
이것이 파티션 UUID를 제공한다고 생각합니다.
사용자에게 물어볼 수도 있지만 번거로울 것입니다.
스크립트 형식으로 사용할 수 있는 디스크(예: /dev/sdX)와 UUID를 식별할 수 있는 방법이 있습니까?
다음과 같이 정확한 결과를 생성하면 더 좋을 것입니다. 실행하여 CODE_HERE
결과 얻기 /dev/sdX
:)
System:
Host: MidnightStarSign Kernel: 5.12.9-1-MANJARO x86_64 bits: 64 compiler: gcc
v: 11.1.0 Desktop: KDE Plasma 5.21.5 Distro: Manjaro Linux base: Arch Linux
Machine:
Type: Desktop Mobo: ASUSTeK model: PRIME X570-PRO v: Rev X.0x
serial: <superuser required> UEFI: American Megatrends v: 3001
date: 12/04/2020
CPU:
Info: 16-Core model: AMD Ryzen 9 5950X bits: 64 type: MT MCP arch: Zen 3
rev: 0 cache: L2: 8 MiB
flags: avx avx2 lm nx pae sse sse2 sse3 sse4_1 sse4_2 sse4a ssse3 svm
bogomips: 217667
Speed: 3728 MHz min/max: 2200/3400 MHz boost: enabled Core speeds (MHz):
1: 3728 2: 3664 3: 4122 4: 3754 5: 3678 6: 3659 7: 3682 8: 3661 9: 3670
10: 3683 11: 3664 12: 3658 13: 3660 14: 4580 15: 3660 16: 4585 17: 3668
18: 4585 19: 3662 20: 3671 21: 3662 22: 3670 23: 3660 24: 3662 25: 3661
26: 3661 27: 3732 28: 3662 29: 4573 30: 3721 31: 4575 32: 3681
Graphics:
Device-1: NVIDIA GA104 [GeForce RTX 3070] vendor: ASUSTeK driver: nvidia
v: 465.31 bus-ID: 0b:00.0
Device-2: Microdia USB 2.0 Camera type: USB driver: snd-usb-audio,uvcvideo
bus-ID: 7-1:2
Display: x11 server: X.Org 1.20.11 driver: loaded: nvidia resolution:
1: 1920x1080~60Hz 2: 1920x1080 3: 1920x1080
OpenGL: renderer: NVIDIA GeForce RTX 3070/PCIe/SSE2 v: 4.6.0 NVIDIA 465.31
direct render: Yes
Audio:
Device-1: NVIDIA vendor: ASUSTeK driver: snd_hda_intel v: kernel
bus-ID: 0b:00.1
Device-2: AMD Starship/Matisse HD Audio vendor: ASUSTeK driver: snd_hda_intel
v: kernel bus-ID: 0e:00.4
Device-3: JMTek LLC. Plugable USB Audio Device type: USB
driver: hid-generic,snd-usb-audio,usbhid bus-ID: 3-1:2
Device-4: Schiit Audio Schiit Modi 3+ type: USB driver: snd-usb-audio
bus-ID: 3-2:3
Device-5: ASUSTek ASUS AI Noise-Cancelling Mic Adapter type: USB
driver: hid-generic,snd-usb-audio,usbhid bus-ID: 5-5:3
Device-6: Microdia USB 2.0 Camera type: USB driver: snd-usb-audio,uvcvideo
bus-ID: 7-1:2
Sound Server-1: ALSA v: k5.12.9-1-MANJARO running: yes
Sound Server-2: JACK v: 0.125.0 running: no
Sound Server-3: PulseAudio v: 14.2 running: yes
Sound Server-4: PipeWire v: 0.3.30 running: yes
Network:
Device-1: Realtek RTL8125 2.5GbE driver: r8169 v: kernel port: d000
bus-ID: 05:00.0
IF: enp5s0 state: up speed: 1000 Mbps duplex: full mac: 3c:7c:3f:a6:c3:22
Device-2: Intel I211 Gigabit Network vendor: ASUSTeK driver: igb v: kernel
port: c000 bus-ID: 07:00.0
IF: enp7s0 state: down mac: 24:4b:fe:5b:08:2a
Bluetooth:
Device-1: Cambridge Silicon Radio Bluetooth Dongle (HCI mode) type: USB
driver: btusb v: 0.8 bus-ID: 3-5.3:6
Report: rfkill ID: hci0 rfk-id: 0 state: up address: see --recommends
Drives:
Local Storage: total: 3.89 TiB used: 1.83 TiB (47.1%)
ID-1: /dev/nvme0n1 vendor: Western Digital model: WDS100T3X0C-00SJG0
size: 931.51 GiB
ID-2: /dev/nvme1n1 vendor: Western Digital model: WDS100T2B0C-00PXH0
size: 931.51 GiB
ID-3: /dev/sda vendor: Seagate model: ST2000LM015-2E8174 size: 1.82 TiB
ID-4: /dev/sdb type: USB vendor: Generic model: USB3.0 CRW -SD
size: 119.08 GiB
ID-5: /dev/sdd type: USB vendor: Samsung model: Flash Drive FIT
size: 119.51 GiB
ID-6: /dev/sde type: USB vendor: Toshiba model: TransMemory size: 14.92 GiB
ID-7: /dev/sdf type: USB vendor: SanDisk model: Gaming Xbox 360 size: 7.48 GiB
Partition:
ID-1: / size: 767 GiB used: 726.35 GiB (94.7%) fs: btrfs dev: /dev/dm-0
mapped: luks-466d5812-64c7-4a28-bcc4-a1a5adfa9450
ID-2: /boot/efi size: 511 MiB used: 26.1 MiB (5.1%) fs: vfat
dev: /dev/nvme0n1p1
ID-3: /home size: 767 GiB used: 726.35 GiB (94.7%) fs: btrfs dev: /dev/dm-0
mapped: luks-466d5812-64c7-4a28-bcc4-a1a5adfa9450
Swap:
ID-1: swap-1 type: partition size: 64 GiB used: 128.2 MiB (0.2%)
dev: /dev/dm-1 mapped: luks-81b2dc57-06f5-4471-b484-77c3a516f307
Sensors:
System Temperatures: cpu: 79.6 C mobo: 0 C gpu: nvidia temp: 41 C
Fan Speeds (RPM): N/A gpu: nvidia fan: 0%
Info:
Processes: 964 Uptime: 1d 4h 28m Memory: 62.78 GiB used: 39.02 GiB (62.2%)
Init: systemd Compilers: gcc: 11.1.0 clang: 12.0.0 Packages: 2014 Shell: Bash
v: 5.1.8 inxi: 3.3.04
답변1
전반적인 상황은 쉽게 해결될 수 없을 것 같습니다. 하지만 아주 기본적인 경우에는 그리 어렵지 않습니다. 루트 파티션을 얻는 것은 를 실행하는 것만큼 간단합니다 df -h /
. 이제 파티션은 /dev/sdXdigit
(결국 /dev/hdXdigit
) 또는 입니다. /dev/xxxxxpdigit
여기서 xxxxx는 nvme0n1
또는 과 같습니다 mmcblk0
. 따라서 간단한 경우에는 시스템 디스크를 얻는 것이 비교적 간단합니다.
- /파티션 이름 가져오기
-
- 부품 이름이 다음으로 끝나면
digitpdigits
삭제pdigits
- 그렇지 않으면 후행 숫자를 제거하십시오.
- 부품 이름이 다음으로 끝나면
다음을 수행할 수 있습니다.
df -h / | awk '
NR == 2 && $1 ~ /[0-9]p[0-9]+$/ {
disk=$1
sub( /p[0-9]+$/, "", disk )
print disk
}
NR == 2 && $1 ~ /[sh]d.[0-9]+$/ {
disk=$1
sub( /[0-9]+$/, "", disk )
print disk
}
'
그러나 일반적인 그림은 정말 복잡합니다. /는 최소 2개의 디스크(또는 lvm < raid < crypto)가 포함된 일부 raid 장치 위에 자체적으로 구축된 암호화 장치 위에 구축된 lvm 볼륨에 있을 수 있거나 다중 경로 장치(2 컨트롤러)에 있을 수 있습니다. 동일한 컨트롤러에 액세스) 중복성을 위한 장치 및 궁극적으로 하나의 물리적 장치에 2개의 장치 이름이 있음) 또는 zfs raid에 있거나 잘 모르겠습니다...
따라서 시스템이 EFI 모드로 부팅한다고 가정하면 아마도 /boot/efi가 있는 부팅 디스크에 관심이 있을 것입니다. 이 경우에는 df -h /
로 교체하면 됩니다 df -h /boot/efi
. 왜 사용합니까 /boot/efi
? EFI 펌웨어는 단순 파티션만 부팅할 수 있기 때문에 zfs raid, luks, linux raid 또는 Linux에서 사용할 수 있는 기타 이상한 것들을 부팅할 수 없습니다. 시스템 디스크를 감지하는 데 여전히 문제가 있습니다. /boot/efi가 zfs raid, lvm, linux raid 등의 어딘가에 있을 가능성이 있습니다 /dev/sda
./dev/sdb
답변2
시도해 보거나 해당 형식의 버전을 사용해 볼 수 있습니다 stat /
.
출력은 다음과 같습니다.
File: /
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 10302h/66306d Inode: 2 Links: 19
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
[...]
장치 정보: - 16진수 10302는 10진수 103h = 259(nvme 장치) 및 02h = 파티션 2로 디코딩될 수 있습니다.
lsblk
확인함(소수점)
nvme0n1 259:0 0 238.5G 0 disk
├─nvme0n1p1 259:1 0 260M 0 part /boot/efi
├─nvme0n1p2 259:2 0 48.8G 0 part /
└─nvme0n1p3 259:3 0 48.8G 0 part /mnt/linux
이 두 명령에서 보다 스크립트 친화적인 출력을 얻는 것이 가능해야 합니다.
blkid
파티션 UUID를 얻는 데 사용할 수 있습니다.