Để Oracle Automatic Storage Manager (ASM) sử dụng các ổ đĩa, nó cần phải xác định được các thiết bị một cách nhất quán và đảm bảo chúng có quyền sở hữu và quyền truy cập chính xác. Trong Linux, bạn có thể sử dụng ASMLib để quản lý các tác vụ này, nhưng nó được coi là một lớp phức tạp bổ sung và chưa bao giờ thực sự phổ biến. Thay vào đó, nhiều người sử dụng trình quản lý thiết bị Linux "udev" để thực hiện các tác vụ này. Bài viết này trình bày tổng quan ngắn gọn về việc thiết lập các quy tắc udev liên quan đến ổ đĩa để sử dụng với ASM trong Oracle 11g. Tất cả các ví dụ đều được thực hiện bằng Oracle Linux 5, 6, 7 và 8 để chúng nhất quán với RHEL và CentOS 5, 6, 7 và 8.
- Lý lịch
- Xác định các ổ đĩa (/sbin/scsi_id)
- Đảm bảo tính đáng tin cậy của các thiết bị SCSI
- Tạo tệp quy tắc UDEV
- Tải các phân vùng thiết bị khối đã cập nhật (/sbin/partprobe)
- Quy tắc kiểm thử (udevtest)
- Khởi động lại dịch vụ UDEV
- Kiểm tra quyền sở hữu và quyền truy cập
Lý lịch
Về cơ bản, udev thực hiện việc áp dụng các quy tắc được định nghĩa trong các tệp trong thư mục "/etc/udev/rules.d" cho các thiết bị được liệt kê trong thư mục "/dev". Các quy tắc có thể được định nghĩa theo nhiều cách khác nhau, nhưng điều chúng ta cần làm là xác định thiết bị và cho biết chúng ta muốn udev làm gì với nó.
Trong trường hợp này, tôi biết tất cả các thiết bị ổ đĩa của mình đều được đặt tên là "/dev/sd?1", trong đó dấu "?" đại diện cho một chữ cái từ ad, vì vậy tôi có thể xác định các thiết bị cần thiết bằng cách sử dụng các tham số quy tắc sau.
KERNEL=="sd?1", BUS=="scsi"Tôi muốn gán cho mỗi thiết bị cụ thể một bí danh, để nó luôn được nhận dạng theo cùng một cách, bất kể tên thiết bị mà Linux gán cho nó là gì. Vì vậy, tôi cần có khả năng kiểm tra từng thiết bị khớp với mẫu trước đó để xem liệu đó có phải là ổ đĩa mà tôi quan tâm hay không. Mỗi ổ đĩa có một ID SCSI duy nhất, vì vậy tôi có thể đặt một điều kiện kiểm tra vào quy tắc, cho biết cách thực hiện kiểm tra và kết quả mà nó nên trả về nếu khớp thành công. Các tham số quy tắc sau đây giải thích cách kiểm tra thiết bị và kết quả nào được coi là khớp trong Oracle Linux 5.
PROGRAM=="/sbin/scsi_id -g -u -s /block/$parent", RESULT=="SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_"Lệnh này scsi_idhoạt động hơi khác một chút trong Oracle Linux 6, vì vậy cách kiểm tra sau đây sẽ hiệu quả hơn.
PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT=="SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_"Lệnh này scsi_idnằm ở vị trí khác nhau trong Oracle Linux 7 và 8, vì vậy phép thử sau đây là chính xác.
PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_"Sau khi xác định được thiết bị cụ thể cần quan tâm, chúng ta cần chỉ ra những hành động nào nên được thực hiện trên thiết bị đó. Các tham số sau đây xác định tên gọi thay thế, quyền sở hữu và quyền truy cập cho thiết bị.
NAME="asm-disk1", OWNER="oracle", GROUP="dba", MODE="0660"Vì vậy, toàn bộ quy tắc cho mỗi ổ đĩa sẽ trông giống như thế này trong Oracle Linux 5.
KERNEL=="sd?1", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s /block/$parent", RESULT=="SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_", NAME="asm-disk1", OWNER="oracle", GROUP="dba", MODE="0660"Hoặc điều này trong Oracle Linux 6.
KERNEL=="sd?1", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT=="SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_", NAME="asm-disk1", OWNER="oracle", GROUP="dba", MODE="0660"Hoặc điều này trong Oracle Linux 7 và 8.
KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_", SYMLINK+="asm-disk1", OWNER="oracle", GROUP="dba", MODE="0660"Điều này có nghĩa là thiết bị trỏ đến phân vùng "sd*1" trên ổ đĩa có ID SCSI là "SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_" sẽ luôn được gọi là "/dev/asm-disk1", bất kể ký tự "?" mà Linux gán khi thiết bị được phát hiện. Ngoài ra, thiết bị sẽ có quyền sở hữu và quyền truy cập chính xác cho ASM.
Có một số ký tự đại diện và mẫu khớp có thể được sử dụng nếu bạn không muốn viết các quy tắc dành riêng cho từng thiết bị.
Giờ chúng ta đã biết sơ bộ mục tiêu cần đạt được, chúng ta sẽ xem xét từng bước cần thiết để thiết lập các ổ đĩa cho ASM sử dụng.
Xác định các ổ đĩa (/sbin/scsi_id)
Chúng ta sẽ viết các quy tắc dành riêng cho từng thiết bị, vì vậy chúng ta cần có khả năng xác định từng thiết bị một cách nhất quán, bất kể thứ tự Linux phát hiện ra chúng. Để làm điều này, chúng ta sẽ sử dụng ID SCSI cho mỗi ổ đĩa (không phải phân vùng), mà chúng ta có được bằng scsi_idlệnh. Tùy chọn "-s" làm cho các đường dẫn tương đối so với thư mục "/sys". Đối với Oracle Linux 5, hãy sử dụng lệnh sau.
# /sbin/scsi_id -g -u -s /block/sdb SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_ # /sbin/scsi_id -g -u -s /block/sdc SATA_VBOX_HARDDISK_VB46dec7e0-192e8000_ # /sbin/scsi_id -g -u -s /block/sdd SATA_VBOX_HARDDISK_VBce8c63bb-ac67a172_ # /sbin/scsi_id -g -u -s /block/sde SATA_VBOX_HARDDISK_VB7437a3b7-95b199cd_ #
Tùy chọn "-s" không khả dụng trong Oracle Linux 6, vì vậy bạn phải sử dụng cú pháp sau.
# /sbin/scsi_id -g -u -d /dev/sdb SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_ # /sbin/scsi_id -g -u -d /dev/sdc SATA_VBOX_HARDDISK_VB46dec7e0-192e8000_ # /sbin/scsi_id -g -u -d /dev/sdd SATA_VBOX_HARDDISK_VBce8c63bb-ac67a172_ # /sbin/scsi_id -g -u -d /dev/sde SATA_VBOX_HARDDISK_VB7437a3b7-95b199cd_ #
Vị trí của lệnh scsi_id đã thay đổi trong Oracle Linux 7 và 8, vì vậy bạn phải sử dụng cú pháp sau.
# /usr/lib/udev/scsi_id -g -u -d /dev/sdb SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_ # /usr/lib/udev/scsi_id -g -u -d /dev/sdc SATA_VBOX_HARDDISK_VB46dec7e0-192e8000_ # /usr/lib/udev/scsi_id -g -u -d /dev/sdd SATA_VBOX_HARDDISK_VBce8c63bb-ac67a172_ # /usr/lib/udev/scsi_id -g -u -d /dev/sde SATA_VBOX_HARDDISK_VB7437a3b7-95b199cd_ #
Đảm bảo tính đáng tin cậy của các thiết bị SCSI
Thêm đoạn mã sau vào tệp "/etc/scsi_id.config" để cấu hình các thiết bị SCSI là đáng tin cậy. Tạo tệp này nếu nó chưa tồn tại.
options=-gTạo tệp quy tắc UDEV
Tạo tệp "/etc/udev/rules.d/99-oracle-asmdevices.rules".
# vi /etc/udev/rules.d/99-oracle-asmdevices.rulesTệp này cần chứa các dòng sau cho Oracle Linux 5. Tham PROGRAMsố phải khớp với lệnh bạn đã sử dụng để lấy ID SCSI và RESULTtham số phải khớp với giá trị được trả về từ ổ đĩa của bạn.
KERNEL=="sd?1", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s /block/$parent", RESULT=="SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_", NAME="asm-disk1", OWNER="oracle", GROUP="dba", MODE="0660" KERNEL=="sd?1", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s /block/$parent", RESULT=="SATA_VBOX_HARDDISK_VB46dec7e0-192e8000_", NAME="asm-disk2", OWNER="oracle", GROUP="dba", MODE="0660" KERNEL=="sd?1", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s /block/$parent", RESULT=="SATA_VBOX_HARDDISK_VBce8c63bb-ac67a172_", NAME="asm-disk3", OWNER="oracle", GROUP="dba", MODE="0660" KERNEL=="sd?1", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s /block/$parent", RESULT=="SATA_VBOX_HARDDISK_VB7437a3b7-95b199cd_", NAME="asm-disk4", OWNER="oracle", GROUP="dba", MODE="0660"
Phiên bản tương đương dành cho Oracle Linux 6 được hiển thị bên dưới.
KERNEL=="sd?1", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT=="SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_", NAME="asm-disk1", OWNER="oracle", GROUP="dba", MODE="0660" KERNEL=="sd?1", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT=="SATA_VBOX_HARDDISK_VB46dec7e0-192e8000_", NAME="asm-disk2", OWNER="oracle", GROUP="dba", MODE="0660" KERNEL=="sd?1", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT=="SATA_VBOX_HARDDISK_VBce8c63bb-ac67a172_", NAME="asm-disk3", OWNER="oracle", GROUP="dba", MODE="0660" KERNEL=="sd?1", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT=="SATA_VBOX_HARDDISK_VB7437a3b7-95b199cd_", NAME="asm-disk4", OWNER="oracle", GROUP="dba", MODE="0660"
Phiên bản tương đương dành cho Oracle Linux 7 và 8 được hiển thị bên dưới.
KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_", SYMLINK+="asm-disk1", OWNER="oracle", GROUP="dba", MODE="0660" KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="SATA_VBOX_HARDDISK_VB46dec7e0-192e8000_", SYMLINK+="asm-disk2", OWNER="oracle", GROUP="dba", MODE="0660" KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="SATA_VBOX_HARDDISK_VBce8c63bb-ac67a172", SYMLINK+="asm-disk3", OWNER="oracle", GROUP="dba", MODE="0660" KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="SATA_VBOX_HARDDISK_VB7437a3b7-95b199cd_", SYMLINK+="asm-disk4", OWNER="oracle", GROUP="dba", MODE="0660"
Tải các phân vùng Block Device đã cập nhật (/sbin/partprobe)
Tải bảng phân vùng thiết bị khối đã cập nhật.
# #OL5, OL6 và OL77 # /sbin/partprobe /dev/sdb1 # /sbin/partprobe /dev/sdc1 # /sbin/partprobe /dev/sdd1 # /sbin/partprobe /dev/sde1 # #OL8 /sbin/partx -u /dev/sbc1 /sbin/partx -u /dev/sdc1 /sbin/partx -u /dev/sdd1 /sbin/partx -u /dev/sde1
Quy tắc kiểm thử (udevtest)
Kiểm tra xem các quy tắc có hoạt động như mong đợi hay không.
# #OL5 # udevtest /block/sdb/sdb1 # udevtest /block/sdc/sdc1 # udevtest /block/sdd/sdd1 # udevtest /block/sde/sde1 # #OL6 và OL7 # udevadm test /block/sdb/sdb1 # udevadm test /block/sdc/sdc1 # udevadm test /block/sdd/sdd1 # udevadm test /block/sde/sde1
Kết quả đầu ra từ đĩa đầu tiên sẽ trông giống như thế này.
# udevtest /block/sdb/sdb1
main: looking at device '/block/sdb/sdb1' from subsystem 'block'
udev_rules_get_name: add symlink 'disk/by-id/scsi-SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3-part1'
udev_rules_get_name: add symlink 'disk/by-path/pci-0000:00:0d.0-scsi-1:0:0:0-part1'
run_program: '/lib/udev/vol_id --export /dev/.tmp-8-17'
run_program: '/lib/udev/vol_id' returned with status 4
run_program: '/sbin/scsi_id -g -u -s /block/sdb/sdb1'
run_program: '/sbin/scsi_id' (stdout) 'SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_'
run_program: '/sbin/scsi_id' returned with status 0
udev_rules_get_name: rule applied, 'sdb1' becomes 'asm-disk1'
udev_device_event: device '/block/sdb/sdb1' already in database, validate currently present symlinks
udev_node_add: creating device node '/dev/asm-disk1', major = '8', minor = '17', mode = '0660', uid = '1100', gid = '1200'
udev_node_add: creating symlink '/dev/disk/by-id/scsi-SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3-part1' to '../../asm-disk1'
udev_node_add: creating symlink '/dev/disk/by-path/pci-0000:00:0d.0-scsi-1:0:0:0-part1' to '../../asm-disk1'
main: run: 'socket:/org/kernel/dm/multipath_event'
main: run: 'socket:/org/kernel/udev/monitor'
main: run: '/lib/udev/udev_run_devd'
main: run: 'socket:/org/freedesktop/hal/udev_event'
main: run: '/sbin/pam_console_apply /dev/asm-disk1 /dev/disk/by-id/scsi-SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3-part1 /dev/disk/by-path/pci-0000:00:0d.0-scsi-1:0:0:0-part1'
#Khởi động lại dịch vụ UDEV
Khởi động lại dịch vụ UDEV.
# #OL5 # /sbin/udevcontrol reload_rules # #OL6, OL7 và OL8 # /sbinudevadm control --reload-rules # #OL5 và OL6: Không cần thiết cho OL7 và OL8 # /sbin/start_udev
Kiểm tra quyền sở hữu và quyền truy cập
Hãy kiểm tra xem các đĩa hiện đã có sẵn với bí danh "asm-disk*" và quyền sở hữu cũng như quyền truy cập chính xác hay chưa.
# cd /dev # ls -al asm-disk* brw-rw---- 1 oracle dba 8, 17 Apr 8 22:47 asm-disk1 brw-rw---- 1 oracle dba 8, 33 Apr 8 22:47 asm-disk2 brw-rw---- 1 oracle dba 8, 49 Apr 8 22:47 asm-disk3 brw-rw---- 1 oracle dba 8, 65 Apr 8 22:47 asm-disk4 #
Vì vậy, ASM_DISKSTRINGtham số khởi tạo trong phiên bản ASM có thể được đặt thành '/dev/asm-disk*' để xác định các đĩa ASM.
Để biết thêm thông tin chi tiết, vui lòng xem:
Hi vọng điều này sẽ hữu ích
TƯ VẤN: Click Here hoặc Hotline/Zalo 090.29.12.888
=============================
Website không chứa bất kỳ quảng cáo nào, mọi đóng góp để duy trì phát triển cho website (donation) xin vui lòng gửi về STK 90.2142.8888 - Ngân hàng Vietcombank Thăng Long - TRAN VAN BINH
=============================
Nếu bạn không muốn bị AI thay thế và tiết kiệm 3-5 NĂM trên con đường trở thành DBA chuyên nghiệp hay làm chủ Database thì hãy đăng ký ngay KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE, được Coaching trực tiếp từ tôi với toàn bộ bí kíp thực chiến, thủ tục, quy trình của gần 20 năm kinh nghiệm (mà bạn sẽ KHÔNG THỂ tìm kiếm trên Internet/Google) từ đó giúp bạn dễ dàng quản trị mọi hệ thống Core tại Việt Nam và trên thế giới, đỗ OCP.
- CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
- Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
2 khóa học online qua video giúp bạn nhanh chóng có những kiến thức nền tảng về Linux, Oracle, học mọi nơi, chỉ cần có Internet/4G:
- Oracle cơ bản: https://bit.ly/admin_1200
- Linux: https://bit.ly/linux_1200
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội
=============================
cơ sở dữ liệu, cơ sở dữ liệu quốc gia, database, AI, trí tuệ nhân tạo, artificial intelligence, machine learning, deep learning, LLM, ChatGPT, DeepSeek, Grok, oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c/21c/23c/23ai, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, docker, k8s, micro service, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty