Nếu tôi có UUID của phân vùng ổ đĩa, tôi sẽ tìm hiểu xem nó có được gắn kết hay không, sử dụng dòng lệnh?
tune2fs
.
tune2fs -U random /dev/sdxx
. Nhưng điều này sẽ không hoạt động cho tất cả các loại phân vùng.
Nếu tôi có UUID của phân vùng ổ đĩa, tôi sẽ tìm hiểu xem nó có được gắn kết hay không, sử dụng dòng lệnh?
tune2fs
.
tune2fs -U random /dev/sdxx
. Nhưng điều này sẽ không hoạt động cho tất cả các loại phân vùng.
Câu trả lời:
lsblk
có thể giúp. Nó có thể chỉ in UUID và điểm gắn kết, vì vậy, với UUID, chỉ cần xem điểm gắn kết không trống:
uuid=foo
lsblk -o UUID,MOUNTPOINT | awk -v u="$uuid" '$1 == u {print $2}'
Vì thế:
uuid=foo
mountpoint=$(lsblk -o UUID,MOUNTPOINT | awk -v u="$uuid" '$1 == u {print $2}')
if [[ -n $mountpoint ]]
then
echo mounted
else
echo not mounted
fi
Vì lbslk
có thể hoạt động trên các thiết bị cụ thể, bạn cũng có thể thực hiện:
mountpoint=$(lsblk -o MOUNTPOINT "/dev/disk/by-uuid/$uuid" | awk 'NR==2')
Với phương thức đầu tiên, sẽ không có lỗi nếu UUID đó không phải từ một đĩa hiện được kết nối. Với phương thức thứ hai, lsblk
sẽ báo lỗi nếu /dev/disk/by-uuid/$uuid
không tồn tại.
lsblk -o UUID,SIZE,MOUNTPOINT
Nếu bạn chỉ muốn một dòng với UUID và mountpoint ($ UUID đại diện cho UUID của bạn):
lsblk -o UUID,MOUNTPOINT|grep "$UUID"
Điểm gắn kết sẽ trống nếu nó không được đếm. Hãy thử lsblk -h
để có nhiều lựa chọn hơn.
Sử dụng awk
để in kết quả. if NF
(Số lượng trường) nhiều hơn một nghĩa là nó có điểm gắn kết:
lsblk -o UUID,MOUNTPOINT|grep "$UUID"|awk '{if (NF>1) print $1" is mounted"; else print $1" is unmounted";}'
Nếu bạn muốn các chi tiết như từ mount
for uuid in /dev/disk/by-uuid/*; do if [[ "$uuid" =~ .*your-UUID-here.* ]]; then echo $(mount | grep "$(readlink -e "$uuid")") ; fi; done
thay thế your-UUID-here
bằng UUID của bạn
dễ đọc hơn:
for uuid in /dev/disk/by-uuid/*; do
if [[ "$uuid" =~ .*your-UUID-here.* ]]
then echo $(mount | grep "$(readlink -e "$uuid")")
fi
done
ví dụ đầu ra:
/dev/mmcblk1p2 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
Bạn chỉ có thể làm cho nó kiểm tra xem chuỗi không phải là null và echo "mount":
for uuid in /dev/disk/by-uuid/*; do if [[ "$uuid" =~ .*your-UUID-here.* ]]; then if [[ $(mount | grep "$(readlink -e "$uuid")") ]]; then echo "mounted"; fi; fi; done
nhưng những người khác đã cho những cách tốt hơn để làm điều đó :)
Ubuntu sử dụng UDisks2
trình nền, trong đó thăm dò toàn bộ thông tin về các hệ thống tệp và chúng tôi có thể sử dụng udisksctl
và lọc đầu ra của nó để tìm một cách nhanh chóng và bẩn thỉu để tìm thông tin chúng tôi cần:
udisksctl dump | python -c 'import sys;lines = [l.strip() for l in sys.stdin if " UUID" in l or " MountPoints:" in l];print "\n".join(lines)'
Những gì bạn thấy ở trên, về cơ bản sẽ in UUID của các hệ thống tập tin và các điểm gắn kết của chúng. Bằng cách kiểm tra trực quan, bây giờ bạn có thể tìm ra, UUID nào được gắn và cái nào không.
$ udisksctl dump | python -c 'import sys;lines = [l.strip() for l in sys.stdin
> if " UUID" in l or " MountPoints:" in l];print "\n".join(lines)'
MountPoints: /
UUID: 000b5321-01
MountPoints:
UUID: bbf23a81-808e-11e4-a445-201a06d7b0e9
MountPoints:
UUID: bbf23a87-808e-11e4-a445-201a06d7b0e9
MountPoints:
UUID: bbf23a89-808e-11e4-a445-201a06d7b0e9
MountPoints:
UUID: bbf23a8f-808e-11e4-a445-201a06d7b0e9
MountPoints:
UUID: 02fe8de2-a408-11e4-8eeb-f0761c8c6df7
MountPoints: /mnt/HDD
UUID: 53827413-0b7e-4ae6-ae09-1daea529d6a1
Giải pháp của tôi
procfs
, do đó, không có vấn đề định dạng đầu ra lệnh lạ,my_uuid=...
while IFS=' ' read -r dev mnt remainder; do
case "$dev" in
/dev/*)
if [ "$dev" -ef "/dev/disk/by-uuid/$my_uuid" ]; then
echo "$my_uuid ($dev) mounted at $mnt"
break
fi;;
esac
done < /proc/mounts
Dựa trên những câu trả lời xuất sắc mà tôi nhận được cho câu hỏi này, tôi nhận ra rằng làm việc với tên thiết bị dễ dàng hơn nhiều. Để lấy tên thiết bị từ UUID:
disk_uuid=foo
disk_devname=$(blkid -U "$disk_uuid")
Điều đó có nghĩa là tôi có thể nhanh chóng suy luận nếu nó được gắn kết bằng cách lấy đầu ra của df
:
df | grep -q "$disk_devname" && echo "Disk mounted" || echo "Disk not mounted"
Hoặc bằng cách sử dụng mã trong câu trả lời của Muru , có thêm phần thưởng cho tôi biết ổ đĩa được gắn ở đâu:
mountpoint=$(lsblk -no MOUNTPOINT "$disk_devname")
if [[ -n "$mountpoint" ]]; then
echo "Disk is mounted at $mountpoint"
else
echo "Disk not mounted"
fi
Bạn có thể sử dụng df
lệnh để xem các hệ thống tệp được gắn kết và điểm gắn kết của chúng. Dưới đây là một ví dụ từ máy của tôi ... phân vùng sdb3
mà tôi đã cài đặt hệ thống khác, không được gắn kết, vì vậy không được liệt kê (phân vùng được gắn nhãn lại, đó là lý do tại sao tên được hiển thị thay vì UUID):
df
Filesystem 1K-blocks Used Available Use% Mounted on
udev 8100756 0 8100756 0% /dev
tmpfs 1625296 9952 1615344 1% /run
/dev/sdb4 41022688 7074348 31834804 19% /
tmpfs 8126464 19456 8107008 1% /dev/shm
tmpfs 5120 4 5116 1% /run/lock
tmpfs 8126464 0 8126464 0% /sys/fs/cgroup
/dev/loop0 76800 76800 0 100% /snap/ubuntu-core/423
/dev/sdb1 4186108 12160 4173948 1% /boot/efi
zsc-lxd/containers/uc-1604-1 58620160 516736 58103424 1% /var/lib/lxd/containers/uc-1604-1.zfs
zsc-lxd/containers/uc-1610-1 58637184 533760 58103424 1% /var/lib/lxd/containers/uc-1610-1.zfs
tmpfs 1625292 124 1625168 1% /run/user/1000
/dev/sdb5 61796348 10766892 47867344 19% /media/cl/virtual
/dev/sda4 206293688 13419740 182371804 7% /media/cl/system
/dev/sda3 206293688 32116600 163674944 17% /media/cl/rescue
/dev/sda2 206293688 1867604 193923940 1% /media/cl/media
/dev/sda1 206293688 2539712 193251832 2% /media/cl/data
df
?
Nếu có một liên kết có tên " the_UUID
" trong /dev/disk/by-uuid/
phân vùng được gắn kết. Trên Ubuntu 14.04.5 (YMMV) của tôi:
$ ll /dev/disk/by-uuid
total 0
lrwxrwxrwx 1 root root 9 Nov 14 04:30 0123-4567 -> ../../sde
lrwxrwxrwx 1 root root 10 Nov 11 00:25 06ee65d5-26f7-41f3-91ab-3497021a6213 -> ../../dm-0
lrwxrwxrwx 1 root root 10 Nov 11 00:25 12817b99-9d2b-4357-a4ca-c11eab672a20 -> ../../sdb6
lrwxrwxrwx 1 root root 10 Nov 11 00:25 362254e8-2b99-442d-8ad9-4a348bc08032 -> ../../sda1
lrwxrwxrwx 1 root root 10 Nov 11 00:25 83a64b80-5a37-4659-b797-221b88ef41f8 -> ../../sdb5
lrwxrwxrwx 1 root root 10 Nov 11 00:25 ff359af0-d996-4949-b27e-f24ce453c48c -> ../../sdc1
dmesg
và /var/log/kern.log*
. Có vẻ như hệ thống không hài lòng với hệ thống tệp trên phân vùng và không thể gắn kết nó. Một nguyên nhân có thể là ngủ đông Windows.
/dev/disks/by-uuid/
thư mục.
/dev/disk/by-uuid
và các đối tác của nó giữ tất cả UUID / ID / nhãn của các thiết bị được kết nối được biết đến với udev bất kể trạng thái gắn kết của chúng.