Bu makalemizde “Linux İşletim Sistemlerinde Disk Header ve ASM Header Yapılandırması”nı inceleyeceğiz. Bu işlemler bize özellikle “SAN” (Storage Area Network) ortamından atanmış diskleri tespit etmede veya sistemimizde bulunan disklerin imajını alma gibi uygulamaları yapmamızı sağlayacaktır. Ayrıca Oracle tarafından kullanılan ASM dosya sistemi içinde buna benzer işlemleri bu yazı içerisinde diğer konularla birlikte inceleyeceğiz. Aşağıdaki işlemleri yapabilmemiz için sunucularımıza SAN ortamından ikişer adet ortak disk alanı atanmış ancak ikinci üye üzerinde fazladan bir disk alanımız mevcut yani sunucularımızdan birinde disk yapılandırması farklı durumdadır. Bu işlemlere başlamadan önce sunucularımızda SAN ortamı için “Linux Multipath Yapılandırması” işleminin yapıldığını varsayıyoruz.
-- 1. Üyedeki disklerimiz [root@koraykey-db1 ~]# ls /dev/sd* /dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdc -- 2. Üyedeki disklerimiz [root@koraykey-db2 ~]# ls /dev/sd* /dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdc /dev/sdd -- Gördüğümüz gibi ikinci üyemizde fazladan bir disk mevcut durumda ancak hangi sunucuda hangi diskin karşılığı olduğunu bilmiyoruz. Şimdi bunları bulacağız. Burada bildiğimiz "sda" isimli disklerimiz işletim sistemimiz tarafından kullanılan disklerdir.
A-) Linux Disk Header İşlemleri
1. Disk header okuma ve yazma işlemlerini yapıp her iki sunucuda depolama ünitesinden atanmış bu disklerimizi tespit edeceğiz.
-- Dikkat edeceğimiz konu eğer içinde veri olan bir diskle bunu yapacaksak sadece disk header okuma işlemlerini yapıp her iki üyede karşılaştırarak bulacağız. Eğer veri olan bir diskte header içerisinde bir veri yazdırırsak diskimizde veri kaybı olabilir. Aşağıdaki işlemler yeni atanmış diskleri bulmakta kullanılmalıdır. -- Öncelikle disklerimize "header" yazdırma işlemi için bir dosya oluşturacağız ve bu dosyada yazanları diskimizin header bölümüne yazdıracağız. -- 1. üyemizde aşağıdaki dosyamızı yaratıyoruz. # vim /tmp/header.txt dosyamızın içine aşağıdaki yazıyı yazıyoruz ve kaydederek çıkıyoruz. D I S K 1 -- Dosyamızda yazanları diskimizin header bölümüne yazdırıyoruz. -- 1. üyemizde "sdb" diskimizin header bölümüne dosyamızı yazdırıyoruz. [root@koraykey-db1 ~]# dd if=/tmp/header.txt of=/dev/sdb 0+1 records in 0+1 records out 10 bytes (10 B) copied, 0.00518064 s, 1.9 kB/s -- Şimdi diskimize yazdırdığımız header bölümünü okuyoruz. [root@koraykey-db1 ~]# od -c /dev/sdb | head -10 0000000 D I S K 1 \n \0 \0 \0 \0 \0 \0 0000020 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 * 50000000000 -- Gördüğümüz gibi header.txt dosyamızdan yazdırdığımız DISK1 yazısı diskimizin header bölümünde. -- 1. üyemizde "sdb" olan diskimizin 2. üyemizde hangisi olduğunu bulabilmek için header okuma işlemini yapıyoruz. Bunun için "sdb" "sdc" "sdd" vb. disklerde bulana kadar denemeliyiz. [root@koraykey-db2 ~]# od -c /dev/sdc | head -10 0000000 D I S K 1 \n \0 \0 \0 \0 \0 \0 0000020 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 * 50000000000 -- Gördüğümüz gibi 1. üyede "sdb" olan diskimiz 2. üyede "sdc" isimli diskimize karşılık geliyor. Sistemimizde ayarlamaları buna göre yapabiliriz.
2. Disklerimizin imaj olarak kopyasını bir dosyaya alabilir ve bir sorun durumunda bu dosyadan dönebiliriz.
-- Diskimizin bir kopyasını başka bir diske almak için aşağıdaki örnek komutu kullanabiliriz. # dd if=/dev/sdb of=/dev/sdc -- Diskimizin bir kopyasını imaj dosyasına yazdırmak için aşağıdaki örnek komutu kullanabiliriz. # dd if=/dev/sdb of=/u01/disks/sdb_image.dd -- Diskimizin bir kopyasını sıkıştırarak imaj dosyasına yazdırmak için aşağıdaki örnek komutu kullanabiliriz. # dd if=/dev/sdb | gzip > /u01/disks/sdb_image.gz -- Disklerimizin MBR Bölümlerini veya Header gibi belli bir bölümünü imaj dosyasına yazdırmak için aşağıdaki örnek komutu kullanabiliriz. # dd if=/dev/sdb of=/u01/disks/sdbheader_image.dd count=10 bs=1M -- Aldığımız disk imajlarımızı sorguluyoruz. # ll /u01/disks/ total 3148788 -rw-r--r-- 1 root root 10485760 May 18 02:11 sdbheader_image.dd -rw-r--r-- 1 root root 3221225472 May 18 02:03 sdb_image.dd -rw-r--r-- 1 root root 3126140 May 18 02:04 sdb_image.gz -- Gördüğümüz gibi sıkıştırarak aldığımızda çok daha az alan kaplamaktadır. -- Diskimizde herhangi bir bozulma olduğunda elimizdeki bu imajlardan geri dönüş işlemi yapabiliriz. # dd if=/u01/disks/sdb_image.dd of=/dev/sdb -- Diskimizin MBR Bölümlerini veya Header gibi belli bir bölümünü imaj dosyasından dönme işlemi yapabiliriz. # dd if=/u01/disks/sdb_image.dd of=/dev/sdb count=10 bs=1M -- Diskimizin "header" bölümünü silmek için aşağıdaki komutu kullanabiliriz. # dd if=/dev/zero of=/dev/sdb bs=2048 count=100
B-) Oracle ASM Disk Header İşlemleri
1. Sunucumuzda bulunan disklerimiz eğer RAC vb. cluster ortamlarında kullanılacaksa öncelikle bunları tespit etmemiz ve her iki sunucuda aynı disk düzeninde değilse eşitlememiz gerekiyor. Şimdi bu disklerimizi sunucularımızda tespit edip her iki sunucumuzda eşitleyelim.
-- Dikkat edeceğimiz konu eğer içinde veri olan bir diskle bunu yapacaksak sadece disk header okuma işlemlerini yapıp her iki üyede karşılaştırarak bulacağız. Eğer veri olan bir diskte header içerisinde bir veri yazdırırsak diskimizde veri kaybı olabilir. Aşağıdaki işlemler yeni atanmış diskleri bulmakta kullanılmalıdır. -- Öncelikle her iki üyede disklerimizi sorguluyoruz. [root@koraykey-db1 ~]# ls -l /dev/sd* brw-rw---- 1 root disk 8, 0 May 18 12:57 /dev/sda brw-rw---- 1 root disk 8, 1 May 18 12:57 /dev/sda1 brw-rw---- 1 root disk 8, 2 May 18 12:57 /dev/sda2 brw-rw---- 1 root disk 8, 16 May 18 12:58 /dev/sdb brw-rw---- 1 root disk 8, 32 May 18 12:58 /dev/sdc [root@koraykey-db2 ~]# ls -l /dev/sd* brw-rw---- 1 root disk 8, 0 May 18 12:57 /dev/sda brw-rw---- 1 root disk 8, 1 May 18 12:57 /dev/sda1 brw-rw---- 1 root disk 8, 2 May 18 12:57 /dev/sda2 brw-rw---- 1 root disk 8, 16 May 18 12:57 /dev/sdb brw-rw---- 1 root disk 8, 32 May 18 13:06 /dev/sdc brw-rw---- 1 root disk 8, 48 May 18 13:06 /dev/sdd -- Gördüğümüz gibi her iki sunucumuzda disk yapılandırması farklı. -- Şimdi 1. sunucumuzda bulunan bir diskin 2. sunucuda hangi diske karşılık geldiğini bulalım. -- 1. üyemizde aşağıdaki dosyamızı yaratıyoruz. # vim /tmp/header.txt dosyamızın içine aşağıdaki yazıyı yazıyoruz ve kaydederek çıkıyoruz. A S M D I S K 1 -- Dosyamızda yazanları diskimizin header bölümüne yazdırıyoruz. -- 1. üyemizde "sdb" diskimizin header bölümüne dosyamızı yazdırıyoruz. [root@koraykey-db1 ~]# dd if=/tmp/header.txt of=/dev/sdb 0+1 records in 0+1 records out 16 bytes (16 B) copied, 0.220797 s, 0.1 kB/s -- Şimdi diskimize yazdırdığımız header bölümünü okuyoruz. 0000000 A S M D I S K 1 \n 0000020 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 * 50000000000 -- Gördüğümüz gibi header.txt dosyamızdan yazdırdığımız DISK1 yazısı diskimizin header bölümünde. -- 1. üyemizde "sdb" olan diskimizin 2. üyemizde hangisi olduğunu bulabilmek için header okuma işlemini yapıyoruz. Bunun için "sdb" "sdc" "sdd" vb. disklerde bulana kadar denemeliyiz. [root@koraykey-db2 ~]# od -c /dev/sdc | head -10 0000000 A S M D I S K 1 \n 0000020 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 * 50000000000 -- Gördüğümüz gibi 1. üyede "sdb" olan diskimiz 2. üyede "sdc" isimli diskimize karşılık geliyor. Bu şekilde header dosyamızın içersinde "ASM DISK 2" gibi yazarak diğer disklerin header bölümüne yazdırarak tespit edebiliriz. -- Yaptığımız tespite göre ASM tarafından kullanılacak disklerde 1. Üyede bulunan "sdb" diski 2. üyede "sdc" diskine karşılık geliyor. 1. Üyede bulunan "sdc" diski 2. üyede "sdd" diskine karşılık geliyor. -- Disklerimizde "fdisk" ile partition table oluşturuyoruz. Bu işlemi sadece 1 üyede yapacağız. -- Verdiğimiz yanıtlar sırasıyla "n" "p" "1" "enter" "enter" "w" # fdisk /dev/sdb Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0x09bb2728. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-652, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-652, default 652): Using default value 652 Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. -- Aynı işlemi fra diskimiz içinde yapıyoruz. Bu işlemi sadece 1 üyede yapacağız. -- Verdiğimiz yanıtlar sırasıyla "n" "p" "1" "enter" "enter" "w" # fdisk /dev/sdc Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0x40c75b12. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-652, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-652, default 652): Using default value 652 Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. -- Sunucularımızı "mknod" komutunu kullanmadan önce yeniden başlatıyoruz. # shutdown -r now -- Her iki üyede bu diskleri eşitlemek için "mknod" komutunu kullanıyoruz. Bu işlemi yapabilmek için disklerimizin major ve minor numaralarını tespit etmemiz gerekiyor. fdisk işlemi sonrası sonunda "1" olan disklerimizi sorguluyoruz. -- 1. Üyede major ve minor numaralarını tespit ediyoruz. # ls -l /dev/sdb1 brw-rw---- 1 root disk 8, 17 May 18 12:58 /dev/sdb1 -- Major 8 Minor 17 # ls -l /dev/sdc1 brw-rw---- 1 root disk 8, 33 May 18 12:58 /dev/sdc1 -- Major 8 Minor 33 -- 2. üyede daha önce karşılığını bildiğimiz diskleri sorguluyoruz. # ls -l /dev/sdc1 brw-rw---- 1 root disk 8, 33 May 18 12:58 /dev/sdc1 -- Major 8 Minor 33 # ls -l /dev/sdd1 brw-rw---- 1 root disk 8, 49 May 18 12:58 /dev/sdd1 -- Major 8 Minor 49 -- Disklerimizi her iki sunucuda eşitliyoruz. -- 1. Üyede bulduğumuz major ve minor numarası ile /dev/altında disklerimizi oluşturuyoruz. -- Data Diskimiz # mknod /dev/data1 b 8 17 -- Fra Diskimiz # mknod /dev/fra1 b 8 33 -- 2. Üyede bulduğumuz major ve minor numarası ile /dev/altında disklerimizi oluşturuyoruz. -- Data Diskimiz # mknod /dev/data1 b 8 33 -- Fra Diskimiz # mknod /dev/fra1 b 8 49 -- Artık disklerimiz eşitlenmiş ve hazır durumda. Durumu özetlersek her iki sunucumuzda "/dev" altında "data1" ve "fra1" isminde diskler bulunuyor. -- Son olarak bu disklerimiz haklarını ayarlayalım. # chown root:disk /dev/data1 # chown root:disk /dev/fra1
2. Şimdi oluşturduğumuz disklerimizi ASM Library ile hazırlayıp damgalayalım.
-- Aşağıdaki işlemleri her iki üyede "root" kullanıcısı ile uyguluyoruz. -- Öncelikle ASM Library için güncelleme, yetkilendirme ve yapılandırma ayarımızı yapıyoruz. -- Oracle ASM Library sürücümüzün güncelliğini kontrol ediyoruz. # oracleasm update-driver Kernel: 2.6.39-400.17.2.el6uek.x86_64 x86_64 Driver name: oracleasm-2.6.39-400.17.2.el6uek.x86_64 Driver for kernel 2.6.39-400.17.2.el6uek.x86_64 does not exist -- Oracle ASM Yetkilendirme işlemlerini yapıyoruz. # oracleasm configure -I Configuring the Oracle ASM library driver. This will configure the on-boot properties of the Oracle ASM library driver. The following questions will determine whether the driver is loaded on boot and what permissions it will have. The current values will be shown in brackets ('[]'). Hitting <ENTER> without typing an answer will keep that current value. Ctrl-C will abort. Default user to own the driver interface []: oracle Default group to own the driver interface []: dba Start Oracle ASM library driver on boot (y/n) [n]: y Scan for Oracle ASM disks on boot (y/n) [y]: y The next two configuration options take substrings to match device names. The substring "sd" (without the quotes), for example, matches "sda", "sdb", etc. You may enter more than one substring pattern, separated by spaces. The special string "none" (again, without the quotes) will clear the value. Device order to scan for ASM disks []: Devices to exclude from scanning []: Use device logical block size for ASM (y/n) [n]: y Writing Oracle ASM library driver configuration: done 1. soruda "oracle" yazıp enter tuşuna basıyoruz. 2. soruda "dba" yazıp enter tuşuna basıyoruz. 3. soruda "y" yazıp enter tuşuna basıyoruz. 4. soruda "y" yazıp enter tuşuna basıyoruz. 5. ve 6. sorularda hiçbirşey yazmadan enter tuşuna basıyoruz. -- Şimdi Oracle ASM Kernel modülünü aktif edip "/dev/oracleasm" altında Oracle Mount Point'i oluşturalım. # oracleasm init Creating /dev/oracleasm mount point: /dev/oracleasm Loading module "oracleasm": oracleasm Configuring "oracleasm" to use device logical block size Mounting ASMlib driver filesystem: /dev/oracleasm -- Bu işlemlerden sonra artık ASM için disklerimizi oluşturup damgalayabiliriz. -- Buradaki işlemler tek bir üye üzerinden yapılmalıdır. Kesinlikle her iki üyede uygulanmamalıdır. # oracleasm createdisk data1 /dev/data1 Writing disk header: done Instantiating disk: done # oracleasm createdisk fra1 /dev/fra1 Writing disk header: done Instantiating disk: done -- 2. üyemizin diskleri görebilmesi için aşağıdaki komutu çalıştırıyoruz. # oracleasm scandisks Reloading disk partitions: done Cleaning any stale ASM disks... Scanning system for ASM disks... Instantiating disk "DATA1" Instantiating disk "FRA1" -- Her iki üyemizde disklerimizi listelemek için aşağıdaki komutu çalıştırıyoruz. # oracleasm listdisks DATA1 FRA1
3. Şimdi yarattığımız disklerimizin header bölümünü okuyarak her iki üyede doğru olduğunu teyid edelim.
-- 1. üyemizde "data" ve "fra" disklerimizin header bölümünü okuyoruz. [root@koraykey-db1 ~]# od -c /dev/data1 | head -10 0000000 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 u A T A 0000020 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0000040 O R C L D I S K D A T A 1 \0 \0 \0 0000060 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 * 47751515000 [root@koraykey-db1 ~]# od -c /dev/fra1 | head -10 0000000 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 F R A 1 0000020 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0000040 O R C L D I S K F R A 1 \0 \0 \0 \0 0000060 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 * 47751515000 -- 2. üyemizde "data" ve "fra" disklerimizin header bölümünü okuyoruz. [root@koraykey-db2 ~]# od -c /dev/data1 | head -10 0000000 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 u A T A 0000020 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0000040 O R C L D I S K D A T A 1 \0 \0 \0 0000060 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 * 47751515000 [root@koraykey-db2 ~]# od -c /dev/fra1 | head -10 0000000 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 F R A 1 0000020 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0000040 O R C L D I S K F R A 1 \0 \0 \0 \0 0000060 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 * 47751515000 -- Disklerimizin header bölümleri karşılıklı aynı durumda işlem başarılı olduğu için Grid kurulum işlemine geçebiliriz.
C-) Oracle ASM Disk Header Okuma ve Onarma İşlemleri (kfed)
1. Öncelikle ASM Disklerimizde Header okuma işlemini inceleyelim.
-- ASM Disklerimizi aşağıdaki komut ile sorgulayabiliriz. # kfod status=TRUE asm_diskstring='/dev/oracleasm/disks/*' disk=all dscvgroup=TRUE -------------------------------------------------------------------------------- Disk Size Header Path Disk Group User Group ===================================================================== 1: 10236 Mb MEMBER /dev/oracleasm/disks/DATA1 DATA oracle dba 2: 10236 Mb MEMBER /dev/oracleasm/disks/DATA2 DATA oracle dba 3: 10236 Mb MEMBER /dev/oracleasm/disks/FRA1 FRA oracle dba 4: 10236 Mb MEMBER /dev/oracleasm/disks/FRA2 FRA oracle dba -- ASM Disklerimizin Header bilgisini aşağıdaki komut ile sorgulayabiliriz. # kfed read /dev/oracleasm/disks/DATA1 kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD kfbh.datfmt: 1 ; 0x003: 0x01 kfbh.block.blk: 0 ; 0x004: blk=0 kfbh.block.obj: 2147483648 ; 0x008: disk=0 kfbh.check: 2311714318 ; 0x00c: 0x89c9f60e kfbh.fcn.base: 0 ; 0x010: 0x00000000 kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 kfdhdb.driver.provstr: ORCLDISKDATA1 ; 0x000: length=13 kfdhdb.driver.reserved[0]: 1096040772 ; 0x008: 0x41544144 kfdhdb.driver.reserved[1]: 49 ; 0x00c: 0x00000031 kfdhdb.driver.reserved[2]: 0 ; 0x010: 0x00000000 kfdhdb.driver.reserved[3]: 0 ; 0x014: 0x00000000 kfdhdb.driver.reserved[4]: 0 ; 0x018: 0x00000000 kfdhdb.driver.reserved[5]: 0 ; 0x01c: 0x00000000 kfdhdb.compat: 186646528 ; 0x020: 0x0b200000 kfdhdb.dsknum: 0 ; 0x024: 0x0000 kfdhdb.grptyp: 1 ; 0x026: KFDGTP_EXTERNAL kfdhdb.hdrsts: 3 ; 0x027: KFDHDR_MEMBER kfdhdb.dskname: DATA_0000 ; 0x028: length=9 kfdhdb.grpname: DATA ; 0x048: length=4 kfdhdb.fgname: DATA_0000 ; 0x068: length=9 kfdhdb.capname: ; 0x088: length=0 kfdhdb.crestmp.hi: 32985012 ; 0x0a8: HOUR=0x14 DAYS=0x1d MNTH=0x3 YEAR=0x7dd kfdhdb.crestmp.lo: 2698947584 ; 0x0ac: USEC=0x0 MSEC=0x3ab SECS=0xd MINS=0x28 kfdhdb.mntstmp.hi: 32986742 ; 0x0b0: HOUR=0x16 DAYS=0x13 MNTH=0x5 YEAR=0x7dd kfdhdb.mntstmp.lo: 470566912 ; 0x0b4: USEC=0x0 MSEC=0x312 SECS=0x0 MINS=0x7 kfdhdb.secsize: 512 ; 0x0b8: 0x0200 kfdhdb.blksize: 4096 ; 0x0ba: 0x1000 kfdhdb.ausize: 1048576 ; 0x0bc: 0x00100000 kfdhdb.mfact: 113792 ; 0x0c0: 0x0001bc80 kfdhdb.dsksize: 10236 ; 0x0c4: 0x000027fc kfdhdb.pmcnt: 2 ; 0x0c8: 0x00000002 kfdhdb.fstlocn: 1 ; 0x0cc: 0x00000001 kfdhdb.altlocn: 2 ; 0x0d0: 0x00000002 kfdhdb.f1b1locn: 2 ; 0x0d4: 0x00000002 kfdhdb.redomirrors[0]: 0 ; 0x0d8: 0x0000 kfdhdb.redomirrors[1]: 0 ; 0x0da: 0x0000 kfdhdb.redomirrors[2]: 0 ; 0x0dc: 0x0000 kfdhdb.redomirrors[3]: 0 ; 0x0de: 0x0000 kfdhdb.dbcompat: 168820736 ; 0x0e0: 0x0a100000 kfdhdb.grpstmp.hi: 32985012 ; 0x0e4: HOUR=0x14 DAYS=0x1d MNTH=0x3 YEAR=0x7dd kfdhdb.grpstmp.lo: 2698855424 ; 0x0e8: USEC=0x0 MSEC=0x351 SECS=0xd MINS=0x28 kfdhdb.vfstart: 192 ; 0x0ec: 0x000000c0 kfdhdb.vfend: 224 ; 0x0f0: 0x000000e0 kfdhdb.spfile: 29 ; 0x0f4: 0x0000001d kfdhdb.spfflg: 1 ; 0x0f8: 0x00000001 kfdhdb.ub4spare[0]: 0 ; 0x0fc: 0x00000000 kfdhdb.ub4spare[1]: 0 ; 0x100: 0x00000000 kfdhdb.ub4spare[2]: 0 ; 0x104: 0x00000000 kfdhdb.ub4spare[3]: 0 ; 0x108: 0x00000000 kfdhdb.ub4spare[4]: 0 ; 0x10c: 0x00000000 kfdhdb.ub4spare[5]: 0 ; 0x110: 0x00000000 kfdhdb.ub4spare[6]: 0 ; 0x114: 0x00000000 kfdhdb.ub4spare[7]: 0 ; 0x118: 0x00000000 kfdhdb.ub4spare[8]: 0 ; 0x11c: 0x00000000 kfdhdb.ub4spare[9]: 0 ; 0x120: 0x00000000 kfdhdb.ub4spare[10]: 0 ; 0x124: 0x00000000 kfdhdb.ub4spare[11]: 0 ; 0x128: 0x00000000 kfdhdb.ub4spare[12]: 0 ; 0x12c: 0x00000000 kfdhdb.ub4spare[13]: 0 ; 0x130: 0x00000000 kfdhdb.ub4spare[14]: 0 ; 0x134: 0x00000000 kfdhdb.ub4spare[15]: 0 ; 0x138: 0x00000000 kfdhdb.ub4spare[16]: 0 ; 0x13c: 0x00000000 kfdhdb.ub4spare[17]: 0 ; 0x140: 0x00000000 kfdhdb.ub4spare[18]: 0 ; 0x144: 0x00000000 kfdhdb.ub4spare[19]: 0 ; 0x148: 0x00000000 kfdhdb.ub4spare[20]: 0 ; 0x14c: 0x00000000 kfdhdb.ub4spare[21]: 0 ; 0x150: 0x00000000 kfdhdb.ub4spare[22]: 0 ; 0x154: 0x00000000 kfdhdb.ub4spare[23]: 0 ; 0x158: 0x00000000 kfdhdb.ub4spare[24]: 0 ; 0x15c: 0x00000000 kfdhdb.ub4spare[25]: 0 ; 0x160: 0x00000000 kfdhdb.ub4spare[26]: 0 ; 0x164: 0x00000000 kfdhdb.ub4spare[27]: 0 ; 0x168: 0x00000000 kfdhdb.ub4spare[28]: 0 ; 0x16c: 0x00000000 kfdhdb.ub4spare[29]: 0 ; 0x170: 0x00000000 kfdhdb.ub4spare[30]: 0 ; 0x174: 0x00000000 kfdhdb.ub4spare[31]: 0 ; 0x178: 0x00000000 kfdhdb.ub4spare[32]: 0 ; 0x17c: 0x00000000 kfdhdb.ub4spare[33]: 0 ; 0x180: 0x00000000 kfdhdb.ub4spare[34]: 0 ; 0x184: 0x00000000 kfdhdb.ub4spare[35]: 0 ; 0x188: 0x00000000 kfdhdb.ub4spare[36]: 0 ; 0x18c: 0x00000000 kfdhdb.ub4spare[37]: 0 ; 0x190: 0x00000000 kfdhdb.ub4spare[38]: 0 ; 0x194: 0x00000000 kfdhdb.ub4spare[39]: 0 ; 0x198: 0x00000000 kfdhdb.ub4spare[40]: 0 ; 0x19c: 0x00000000 kfdhdb.ub4spare[41]: 0 ; 0x1a0: 0x00000000 kfdhdb.ub4spare[42]: 0 ; 0x1a4: 0x00000000 kfdhdb.ub4spare[43]: 0 ; 0x1a8: 0x00000000 kfdhdb.ub4spare[44]: 0 ; 0x1ac: 0x00000000 kfdhdb.ub4spare[45]: 0 ; 0x1b0: 0x00000000 kfdhdb.ub4spare[46]: 0 ; 0x1b4: 0x00000000 kfdhdb.ub4spare[47]: 0 ; 0x1b8: 0x00000000 kfdhdb.ub4spare[48]: 0 ; 0x1bc: 0x00000000 kfdhdb.ub4spare[49]: 0 ; 0x1c0: 0x00000000 kfdhdb.ub4spare[50]: 0 ; 0x1c4: 0x00000000 kfdhdb.ub4spare[51]: 0 ; 0x1c8: 0x00000000 kfdhdb.ub4spare[52]: 0 ; 0x1cc: 0x00000000 kfdhdb.ub4spare[53]: 0 ; 0x1d0: 0x00000000 kfdhdb.acdb.aba.seq: 0 ; 0x1d4: 0x00000000 kfdhdb.acdb.aba.blk: 0 ; 0x1d8: 0x00000000 kfdhdb.acdb.ents: 0 ; 0x1dc: 0x0000 kfdhdb.acdb.ub2spare: 0 ; 0x1de: 0x0000
2. ASM Disklerimizin yedeğini alma ve ASM Disklerimizin bozulan header bilgisini onarma işlemini inceleyelim.
-- ASM Disklerimizin header yedeğini almak için aşağıdaki komutu kullanabiliriz. # dd if=/dev/oracleasm/disks/DATA1 of=/u01/backups/asmdata1_bkp.dd bs=1M count=10 10+0 records in 10+0 records out 10485760 bytes (10 MB) copied, 0.220746 s, 47.5 MB/s -- ASM Disklerimizin hangisinde sorun olduğunu kontrol etmek için aşağıdaki komutu kullanabiliriz. # kfod status=TRUE asm_diskstring='/dev/oracleasm/disks/*' disk=all dscvgroup=TRUE -------------------------------------------------------------------------------- Disk Size Header Path Disk Group User Group ===================================================================== 1: 10236 Mb CANDIDATE /dev/oracleasm/disks/DATA1 # oracle dba 2: 10236 Mb MEMBER /dev/oracleasm/disks/DATA2 DATA oracle dba 3: 10236 Mb MEMBER /dev/oracleasm/disks/FRA1 FRA oracle dba 4: 10236 Mb MEMBER /dev/oracleasm/disks/FRA2 FRA oracle dba Gördüğümüz gibi "DATA1" diskimiz "CANDIDATE" durumda ve header bilgisi bozulmuş. -- ASM Disklerimizin Header bilgisini aşağıdaki komut ile sorgulayabiliriz. # kfed read /dev/oracleasm/disks/DATA1 kfbh.endian: 0 ; 0x000: 0x00 kfbh.hard: 0 ; 0x001: 0x00 kfbh.type: 0 ; 0x002: KFBTYP_INVALID kfbh.datfmt: 0 ; 0x003: 0x00 kfbh.block.blk: 0 ; 0x004: blk=0 kfbh.block.obj: 0 ; 0x008: file=0 kfbh.check: 0 ; 0x00c: 0x00000000 kfbh.fcn.base: 0 ; 0x010: 0x00000000 kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 7F5985386400 00000000 00000000 00000000 00000000 [................] Repeat 255 times Gördüğümüz gibi header bilgisi bozuk durumda. -- Bozulan diskimizin au (Allocation Unit) boyutunu bulmak için aşağıdaki komutu kullanabiliriz. # kfed read /dev/oracleasm/disks/DATA1 | grep ausize -- Bozulan diskimizin header bilgisini aşağıdaki komut ile onarabiliriz. # kfed repair /dev/oracleasm/disks/DATA1 aus=1048576 -- ASM Disklerimizi yeniden sorguladığımızda "CANDIDATE" durumda olan diskimizin "MEMBER" duruma geçtiğini görüyoruz. # kfod status=TRUE asm_diskstring='/dev/oracleasm/disks/*' disk=all dscvgroup=TRUE -------------------------------------------------------------------------------- Disk Size Header Path Disk Group User Group ===================================================================== 1: 10236 Mb MEMBER /dev/oracleasm/disks/DATA1 DATA oracle dba 2: 10236 Mb MEMBER /dev/oracleasm/disks/DATA2 DATA oracle dba 3: 10236 Mb MEMBER /dev/oracleasm/disks/FRA1 FRA oracle dba 4: 10236 Mb MEMBER /dev/oracleasm/disks/FRA2 FRA oracle dba -- ASM Disklerimizin Header bilgisini sorguladığımızda normal duruma geldiğini görüyoruz. # kfed read /dev/oracleasm/disks/DATA1 kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD kfbh.datfmt: 1 ; 0x003: 0x01 kfbh.block.blk: 0 ; 0x004: blk=0 kfbh.block.obj: 2147483648 ; 0x008: disk=0 kfbh.check: 2311714318 ; 0x00c: 0x89c9f60e kfbh.fcn.base: 0 ; 0x010: 0x00000000 kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 kfdhdb.driver.provstr: ORCLDISKDATA1 ; 0x000: length=13 kfdhdb.driver.reserved[0]: 1096040772 ; 0x008: 0x41544144 kfdhdb.driver.reserved[1]: 49 ; 0x00c: 0x00000031 kfdhdb.driver.reserved[2]: 0 ; 0x010: 0x00000000 kfdhdb.driver.reserved[3]: 0 ; 0x014: 0x00000000 kfdhdb.driver.reserved[4]: 0 ; 0x018: 0x00000000 kfdhdb.driver.reserved[5]: 0 ; 0x01c: 0x00000000 kfdhdb.compat: 186646528 ; 0x020: 0x0b200000 kfdhdb.dsknum: 0 ; 0x024: 0x0000 kfdhdb.grptyp: 1 ; 0x026: KFDGTP_EXTERNAL kfdhdb.hdrsts: 3 ; 0x027: KFDHDR_MEMBER kfdhdb.dskname: DATA_0000 ; 0x028: length=9 kfdhdb.grpname: DATA ; 0x048: length=4 kfdhdb.fgname: DATA_0000 ; 0x068: length=9 kfdhdb.capname: ; 0x088: length=0 kfdhdb.crestmp.hi: 32985012 ; 0x0a8: HOUR=0x14 DAYS=0x1d MNTH=0x3 YEAR=0x7dd kfdhdb.crestmp.lo: 2698947584 ; 0x0ac: USEC=0x0 MSEC=0x3ab SECS=0xd MINS=0x28 kfdhdb.mntstmp.hi: 32986742 ; 0x0b0: HOUR=0x16 DAYS=0x13 MNTH=0x5 YEAR=0x7dd kfdhdb.mntstmp.lo: 470566912 ; 0x0b4: USEC=0x0 MSEC=0x312 SECS=0x0 MINS=0x7 kfdhdb.secsize: 512 ; 0x0b8: 0x0200 kfdhdb.blksize: 4096 ; 0x0ba: 0x1000 kfdhdb.ausize: 1048576 ; 0x0bc: 0x00100000 kfdhdb.mfact: 113792 ; 0x0c0: 0x0001bc80 kfdhdb.dsksize: 10236 ; 0x0c4: 0x000027fc kfdhdb.pmcnt: 2 ; 0x0c8: 0x00000002 kfdhdb.fstlocn: 1 ; 0x0cc: 0x00000001 kfdhdb.altlocn: 2 ; 0x0d0: 0x00000002 kfdhdb.f1b1locn: 2 ; 0x0d4: 0x00000002 kfdhdb.redomirrors[0]: 0 ; 0x0d8: 0x0000 kfdhdb.redomirrors[1]: 0 ; 0x0da: 0x0000 kfdhdb.redomirrors[2]: 0 ; 0x0dc: 0x0000 kfdhdb.redomirrors[3]: 0 ; 0x0de: 0x0000 kfdhdb.dbcompat: 168820736 ; 0x0e0: 0x0a100000 kfdhdb.grpstmp.hi: 32985012 ; 0x0e4: HOUR=0x14 DAYS=0x1d MNTH=0x3 YEAR=0x7dd kfdhdb.grpstmp.lo: 2698855424 ; 0x0e8: USEC=0x0 MSEC=0x351 SECS=0xd MINS=0x28 kfdhdb.vfstart: 192 ; 0x0ec: 0x000000c0 kfdhdb.vfend: 224 ; 0x0f0: 0x000000e0 kfdhdb.spfile: 29 ; 0x0f4: 0x0000001d kfdhdb.spfflg: 1 ; 0x0f8: 0x00000001 kfdhdb.ub4spare[0]: 0 ; 0x0fc: 0x00000000 kfdhdb.ub4spare[1]: 0 ; 0x100: 0x00000000 kfdhdb.ub4spare[2]: 0 ; 0x104: 0x00000000 kfdhdb.ub4spare[3]: 0 ; 0x108: 0x00000000 kfdhdb.ub4spare[4]: 0 ; 0x10c: 0x00000000 kfdhdb.ub4spare[5]: 0 ; 0x110: 0x00000000 kfdhdb.ub4spare[6]: 0 ; 0x114: 0x00000000 kfdhdb.ub4spare[7]: 0 ; 0x118: 0x00000000 kfdhdb.ub4spare[8]: 0 ; 0x11c: 0x00000000 kfdhdb.ub4spare[9]: 0 ; 0x120: 0x00000000 kfdhdb.ub4spare[10]: 0 ; 0x124: 0x00000000 kfdhdb.ub4spare[11]: 0 ; 0x128: 0x00000000 kfdhdb.ub4spare[12]: 0 ; 0x12c: 0x00000000 kfdhdb.ub4spare[13]: 0 ; 0x130: 0x00000000 kfdhdb.ub4spare[14]: 0 ; 0x134: 0x00000000 kfdhdb.ub4spare[15]: 0 ; 0x138: 0x00000000 kfdhdb.ub4spare[16]: 0 ; 0x13c: 0x00000000 kfdhdb.ub4spare[17]: 0 ; 0x140: 0x00000000 kfdhdb.ub4spare[18]: 0 ; 0x144: 0x00000000 kfdhdb.ub4spare[19]: 0 ; 0x148: 0x00000000 kfdhdb.ub4spare[20]: 0 ; 0x14c: 0x00000000 kfdhdb.ub4spare[21]: 0 ; 0x150: 0x00000000 kfdhdb.ub4spare[22]: 0 ; 0x154: 0x00000000 kfdhdb.ub4spare[23]: 0 ; 0x158: 0x00000000 kfdhdb.ub4spare[24]: 0 ; 0x15c: 0x00000000 kfdhdb.ub4spare[25]: 0 ; 0x160: 0x00000000 kfdhdb.ub4spare[26]: 0 ; 0x164: 0x00000000 kfdhdb.ub4spare[27]: 0 ; 0x168: 0x00000000 kfdhdb.ub4spare[28]: 0 ; 0x16c: 0x00000000 kfdhdb.ub4spare[29]: 0 ; 0x170: 0x00000000 kfdhdb.ub4spare[30]: 0 ; 0x174: 0x00000000 kfdhdb.ub4spare[31]: 0 ; 0x178: 0x00000000 kfdhdb.ub4spare[32]: 0 ; 0x17c: 0x00000000 kfdhdb.ub4spare[33]: 0 ; 0x180: 0x00000000 kfdhdb.ub4spare[34]: 0 ; 0x184: 0x00000000 kfdhdb.ub4spare[35]: 0 ; 0x188: 0x00000000 kfdhdb.ub4spare[36]: 0 ; 0x18c: 0x00000000 kfdhdb.ub4spare[37]: 0 ; 0x190: 0x00000000 kfdhdb.ub4spare[38]: 0 ; 0x194: 0x00000000 kfdhdb.ub4spare[39]: 0 ; 0x198: 0x00000000 kfdhdb.ub4spare[40]: 0 ; 0x19c: 0x00000000 kfdhdb.ub4spare[41]: 0 ; 0x1a0: 0x00000000 kfdhdb.ub4spare[42]: 0 ; 0x1a4: 0x00000000 kfdhdb.ub4spare[43]: 0 ; 0x1a8: 0x00000000 kfdhdb.ub4spare[44]: 0 ; 0x1ac: 0x00000000 kfdhdb.ub4spare[45]: 0 ; 0x1b0: 0x00000000 kfdhdb.ub4spare[46]: 0 ; 0x1b4: 0x00000000 kfdhdb.ub4spare[47]: 0 ; 0x1b8: 0x00000000 kfdhdb.ub4spare[48]: 0 ; 0x1bc: 0x00000000 kfdhdb.ub4spare[49]: 0 ; 0x1c0: 0x00000000 kfdhdb.ub4spare[50]: 0 ; 0x1c4: 0x00000000 kfdhdb.ub4spare[51]: 0 ; 0x1c8: 0x00000000 kfdhdb.ub4spare[52]: 0 ; 0x1cc: 0x00000000 kfdhdb.ub4spare[53]: 0 ; 0x1d0: 0x00000000 kfdhdb.acdb.aba.seq: 0 ; 0x1d4: 0x00000000 kfdhdb.acdb.aba.blk: 0 ; 0x1d8: 0x00000000 kfdhdb.acdb.ents: 0 ; 0x1dc: 0x0000 kfdhdb.acdb.ub2spare: 0 ; 0x1de: 0x0000
Bu makalemizde Linux ve Oracle için disk yapılandırmalarımızı inceledik. Buradaki işlemler kurulum sırasında veya kullanılan sistemlerde disk atamaları yapıldığında çok işimize yarayacaktır. Özellikle Unix işletim sistemlerinde “mknod” ile disk eşitleme işlemi karşımıza sık çıkabilir. Ayrıca ASM Disklerimizde Oracle tarafından sağlanan “kfed” aracı ile “header” bilgisi okuma, onarma vb. işlemleri yapabiliriz.
Başka bir makalede görüşmek üzere…