Linux İşletim Sistemlerinde Disk Header ve ASM Disk Header Yapılandırması

LinuxOracleBu 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…

Bu yazı Oracle, Unix / Linux kategorisine gönderilmiş ve , , , , , , , , , , , , , , , , , , , ile etiketlenmiş. Kalıcı bağlantıyı yer imlerinize ekleyin.