Cuma, Şubat 24, 2012

2 Disks failed simultaneously on a RAID 5 array - Disk, controller or software?

[Log in to get rid of this advertisement]
Hi there. My 1st post, so please be gentle.

I have a home server running Openfiler 2.3 x64 with 4x1.5TB software RAID 5 array (more details on the hardware and OS later). All was working well for two years until several weeks ago, the array failed with two faulty disks at the same time.

Well, those thing could happen, especially if one is using desktop-grade disks instead of enterprise-grade ones (way too expensive for a home server). Since is was most likely a false positive, I've reassembled the array:
Code:

# mdadm --assemble --force /dev/md0 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
mdadm: forcing event count in /dev/sdb1(0) from 110 upto 122
mdadm: forcing event count in /dev/sdc1(1) from 110 upto 122
mdadm: /dev/md0 has been started with 4 drives.

and a reboot later all was back to normal.



-------------------

http://en.wikipedia.org/wiki/Mdadm

Recovering from a loss of raid superblock

There are superblocks on the drives themselves and on the raid (apparently). If you have a power failure, hardware failure, that does not include the drives themselves, and you cannot get the raid to recover in any other way, and wish to recover the data, proceed as follows:

Get a list of the devices in the raid in question:

mdadm --detail /dev/md[x]

Result something like this:

/dev/md127:
Version : 1.2
Creation Time : Sun Aug 21 23:35:28 2011
Raid Level : raid6
Array Size : 7814047744 (7452.06 GiB 8001.58 GB)
Used Dev Size : 1953511936 (1863.01 GiB 2000.40 GB)
Raid Devices : 6
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Sun Jan 1 11:43:17 2012
State : clean, degraded
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Name : clop:1 (local to host clop)
UUID : 7ee1e93a:1b011f80:04503b8d:c5dd1e23
Events : 62
Number Major Minor RaidDevice State
0 8 33 0 active sync /dev/sdc1
1 8 49 1 active sync /dev/sdd1
2 8 81 2 active sync /dev/sdf1
3 8 65 3 active sync /dev/sde1
4 0 0 4 removed
5 0 0 5 removed

RaidDevice order (sdc1,sdd1,sdf1,sde1) and Chunk Size are critical

Record all your raid member parameters:

mdadm --examine /dev/sd[abcde...]1 | egrep 'dev|Update|Role|State|Chunk Size'

Look carefully at the Update time. If you have raid members attached to the motherboard and others attached to a raid card, and the card fails, but leaves enough members to keep the raid alive, you want to make a note of that. Look at Array State and Update Time. For example:

/dev/sdc1:
Update Time : Wed Jun 15 00:32:35 2011
Array State : AAAA.. ('A' == active, '.' == missing)
/dev/sdd1:
Update Time : Thu Jun 16 21:49:27 2011
Array State : .AAA.. ('A' == active, '.' == missing)
/dev/sde1:
Update Time : Thu Jun 16 21:49:27 2011
Array State : .AAA.. ('A' == active, '.' == missing)
/dev/sdf1:
Update Time : Thu Jun 16 21:49:27 2011
Array State : .AAA.. ('A' == active, '.' == missing)
/dev/sdk1:
Update Time : Tue Jun 14 07:09:34 2011
Array State : ....AA ('A' == active, '.' == missing)
/dev/sdl1:
Update Time : Tue Jun 14 07:09:34 2011
Array State : ....AA ('A' == active, '.' == missing)

Devices sdc1, sdd1, sde1 and sdf1 are the last members in the array and will rebuild correctly. sdk1 and sdl1 left the array (in my case due to a raid card failure).

Also note the raid member, starting with 0, the raid needs to be rebuilt in the same order. Chunk size is also important.

Zero the drive superblocks

mdadm --stop /dev/md0 # to halt the array
mdadm --remove /dev/md0 # to remove the array
mdadm --zero-superblock /dev/sd[cdefkl]1

Reassemble the raid

mdadm --create /dev/md1 --chunk=4096 --level=6 --raid-devices=6 /dev/sdc1 /dev/sdd1 /dev/sdf1 /dev/sde1 missing missing

'missing' tell the create command to rebuild the raid in a degraded state. sdk1 and sdl1 can be added later

Edit /etc/mdadm.conf and add an ARRAY line with a UUID. First get the UUID for your raid:

mdadm -D /dev/md

then:

nano /etc/mdadm.conf

and add something similar to the file (notice there is no # in front of the active line you are adding

#ARRAY /dev/md0 UUID=3aaa0122:29827cfa:5331ad66:ca767371
#ARRAY /dev/md1 super-minor=1
#ARRAY /dev/md2 devices=/dev/hda1,/dev/hdb1
ARRAY /dev/md1 UUID=7ee1e93a:1b011f80:04503b8d:c5dd1e23

Save with

Last, mark the array possilbly dirty with:

mdadm --assemble /dev/md1 --update=resync

Monitor the rebuild with

watch -n 1 cat /proc/mdstat

All your data should be recovered!

Birden fazla dosya uzantısını ile arama yapmak ve bunlarla işlem yapmak

How to find multiple file types using linux's "find"
I've always found *nix's "find" and "grep" rather hard to use. Not only are there different flavors of regular expressions to use, but mainly different syntax. For find, the directory you're searching for comes first. For grep, it comes last. To find the negation of something, you'd use "-not" and for grep it's "-v". pain.

Anyway, been trying to learn my tools better, and I found out how to grep and replace expressions across multiple files through emacs. Since rails uses all sorts of file extensions, naturally, I wanted to grep for find different files types. I had thought the -name options took regexs (it doesn't), so I had tried it in regex (no go)...only to find that it's something like this:


find . -name "*.rb" -o -name "*.rhtml"


the -o is the equivalent of a boolean "or". small tip...




------------


I was trying to find a solution todo a find & replace across multiple files which was purely command line based. There are plenty of scripts out there which will accomplish this but I needed a single line command. After some google searches and some experimentation I came up with this snippet.

find . -name "*.php" -print | xargs sed -i 's/foo/bar/g'

It looks a bit complicated but its quite simple. There are three components to the command:

find . -name "*.php" -print – Find all files (recursively) which has “.php” in the file and print them out. This will give you output like this:

./file.php
./includes/test.php
./classes/class.php

xargs- This command is used when you want to pass a lot of arguments to one command. xargs will combine the single line output of find and run commands with multiple
arguments, multiple times if necessary to avoid the max chars per line limit. In this case we combine xargs with sed
sed -i 's/foo/bar/g' – aka Stream Editor is a tool which should be in every sys admin’s toolkit. In this case every occurence of “foor” is replaced by “bar” in all the files found using the “find” command. Sed simply parses input and applies certain text transformations to it. There’s a lot to say about sed, you can find more at this tutorial.

This pretty much covers the core of the find & replace command. You could also open up a particular folder in an IDE and use it’s find and replace feature. But find + sed is quite fast and powerful.



Reply
JohnMay 29, 2008 10:17 AM

You can always use the -regextype to make regex play nice. The problem with using -o is that if you want to pass all of your results to a program as a list with -exec you can't because there needs to be a seperate -exec before each -o.

For instance I wanted to search my music directory or videos and pass them all to mplayer to be played in a random order but I had multiple file types in multiple locations, this is what I came up with:

find ./ -regextype posix-awk -regex "(.*.mpg|.*.avi|.*.wmv|.*.mpeg)" -exec mplayer -shuffle -loop 0 {} +

Cuma, Nisan 23, 2010

Multi-threaded gzip

yedekleme sistemleri ne kadar gelişmiş olursa olsun, benim için hiç bir şey tar/gzip ikilisi ile harici bir diske alınan yedek kadar iç rahatlatıcı olamaz :)

fakat yedeklenmesi gereken yüz binlerce dosya ve yüzlerce GB veriniz varsa, sahip olduğunuz işlemcilerin veya coreların tümünden faydalanamıyor olmak gerçekten çok fazla zaman kaybı ve can sıkıntısına sebep olabilir. çünkü gzip Multi-threaded çoklu işlem/ci desteğine sahip değil (en azından solaris 5.9 durum böyle).

4 işlemciye sahip bir sun sunucu üzerinde yaklaşık 600GB boyutunda ve binlerce dosyadan oluşan bir alanın yedeğini almak neredeyse yarım gün sürüyordu. bu işlem boyunca sistem sahip olduğu 4 işlemciden sadece birisini kullanıyor, ben bitmesi için dört gözle beklerken diğer 3 işlemci tembel tembel yatıyordu.

sıkıştırma işlemlerinde, sistemin sahip olduğu bütün işlemcilerden en fazla faydayı nasıl sağlarım sorusunu araştırırken gördüğüm en kullanıbilir iki yöntemi sizlerle de paylaşmak istedim.

1) farklı terminaller üzerinden paralel işlemler başlatmak: eğer, gzip ile arşivliyeceğiniz dosyalar; herbir işlem için bölebileceğiniz klasörler üzerindeyse veya dosyalar find ile gruplanabilir şekildeyse bu yöntemden faydalanabilirsiniz.

bu yöntemde, sahip olduğunuz işlemci adedince farklı terminaller açıp her birinden farklı alanların arşivleme işlemini başlatıyorsunuz. fakat benim gibi dağınık şekilde onbinlerce dosyanız varsa bunları belli bir mantık çerçevesinde bölüp farklı terminaller üzerinden arşivlemek pekde mümkün olamıyor.

2) kaynak dosyalarını http://zlib.net/pigz/ adresinde bulabileceğiniz pigz programı.

sıkıştırma - açma ve hatta parametler bakımından tamamen gzip ile uyumlu olan bu program gzip in multi-processor / multi-core destekli versiyonu.

kullanmak için tek yapmanız gerek sisteminize uygun versiyonunu yuklemek veya sisteminizde kaynağından derlemek ve gzip yerine pigz i kullanmak.

ben sunfreeware.com adresinden sistemime uygun olan "pigz-2.1.5-sol9-sparc-local.gz" dosyasını indirdim ve gunzip ile dosyayı açtıktan sonra
pkgadd -d pigz-2.1.5-sol9-sparc-local komutu sistemime yükledim.

daha önce yaklaşık yarım gün sürdüğünden bahsettiğim işlemi aşağıdaki şekilde pigz ile başlattım ve oratlama 7 saatde yedekleme işlemi tamamlandı.

tar cvXf /yedek/exlude.list - /dfiles |/usr/local/bin/pigz -4 -c > /tmp/dfiles_`date '+%Y%m%d'`.tar.gz

işlem sonucunda oluşan dosya gunzip ile sorunsuz şeklilde açıldı. yanlız, gunzip da tıpkı gzip gibi çoklu işlemci desteğine sahip değil. birden fazla işlemci ile açma işlemi yapabilmek için paketle birlikte gelen unpigz komutunu kullanabilirsiniz.

Pazartesi, Nisan 12, 2010

xenserver da centos-base deposu ve yum un etkinleştirilmesi

herşeyden önce şunu hatırlatmak isterim ki; xenserver sanallaştırma için özelleştirilmiş - amaçlanmıştır. bu sunucu uzerinde doğrudan başka bir hizmet sunmayı amaçlamak mantıklı bir tasarruf olmayacaktır.

buna rağmen kısmen merak kısmen ise kaderin cilvesi doğrultusunda bu sunucuyu amacı dışında kullanmak ve ek bazı yazılımları yuklemek gerekebiliyor ;) bunu nasıl yapacağımıza bakalım.

xenserver konsoluna bağlanın
tercih ettiğiniz editör ile "/etc/yum.repos.d/CentOS-Base.repo" dosyaını açın ve

[base] başlığı altındaki
enabled=0 değerini
enabled=1 olarak değiştirin, kaydedin.

artık centos-base deposındaki uygulamaları yum ile yükleyebilirsiniz.



[root@vserver ~]# yum install mc
Loading "fastestmirror" plugin
Determining fastest mirrors
* citrix: updates.vmd.citrix.com
* base: mirror.vit.com.tr
citrix 100% |=========================| 951 B 00:00
primary.xml.gz 100% |=========================| 243 B 00:00
base 100% |=========================| 2.1 kB 00:00
primary.sqlite.bz2 100% |=========================| 1.6 MB 00:02
Excluding Packages from CentOS-5 - Base
Finished
Setting up Install Process
Parsing package install arguments
Resolving Dependencies
--> Running transaction check
---> Package mc.i386 1:4.6.1a-35.el5 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
mc i386 1:4.6.1a-35.el5 base 2.1 M

Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)

Total download size: 2.1 M
Is this ok [y/N]: y
Downloading Packages:
(1/1): mc-4.6.1a-35.el5.i 100% |=========================| 2.1 MB 00:03
warning: rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID e8562897
Importing GPG key 0xE8562897 "CentOS-5 Key (CentOS 5 Official Signing Key) Is this ok [y/N]: y
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: mc ######################### [1/1]

Installed: mc.i386 1:4.6.1a-35.el5
Complete!

xenserver üzerinde software raid ile veri deposu (storage repositories) oluşturmak

basit sevideye donanıma sahip bir sunucudan maksimum faydayı sağlamak, disk erişim süresini olabildiğince düşürmek amacıyla RAID kullanmaya karar verdim.

Aslına bakarsanız vmware esxi den xenserver a geçmeye karar vermemde en büyük etken xenserver in software raid ve yedekleme çözümlerindeki esnek yapısı olmuştur.
itiraf etmeliyim ki ilk tanıştığımız zamanlarda gui den kaynaklı bir soğukluk yaşadıysam da, XEN komutları ve XenAPI ile haşır-neşir oldukça benim için geçerli çözümün xenserver olduğunu anladım.

sahip olduğum donanım intel in "fakeraid veya softraid" denen anakart destekli raid yapısını destekliyor ama yaptığım denemeler ve incelemeler sonucunda linux kernelinin sunduğu software raid in çok daha güvelinir ve hızlı olduğunu gördüm ve bunu kullanmaya karar verdim.

xenserver kurulum sırasında software raid desteği vermiyor fakat kurulum bittikten sonra konsol uzerinden raid i yapılandırmak ve xenserver a sr olarak bağlamak son derece kolay. bunun için aşağıdaki adımları izledim

not: raid den onceki ve sonraki disk erişim sürelerini olcmek size performans/seçtiğiniz raid seviyesinin uygunluğu hakkında bilgi verecektir. bunu en basit şekilde şöyle yapabilirsiniz.

hdparm -tT /dev/sdb -> sdb isimli (ikinci sata) diskin okuma hızına bakin ve not edin. bunu raid için kullanacağınız her bir disk için ayrıca tekrarlayabilirsiniz.

yazma hızını ölçmek için
time dd if=/dev/zero of=./testfile bs=65536 count=65536
komutunu kullanabilirsiniz. bu komut sisteminizde testfile isimli 4gb boyutunda bir dosya oluşturacak ve ne kadar zamanda yaptığı bilgisini verecektir.

raid yapısını oluşturduktan sonra aynı ölcümleri
/dev/md0 için yapabilirsiniz.




1) sahip olduğum donanım özellikler;
xeon 5500 serisi 1600mhz işlemci
6gb ram
1x 250gb hdd -> xenserver in kurulumu için kullandım
4x 500gb hdd -> raid için kullandım
1x 1tb hdd -> sunucu ve sanal sistemlere ait yedekler için kullandım




2) size en uygun raid tipini belirlemek;
raid için kullanacağım 4 diskim var ve bu diskler ile oluştura bileceğim raid yapılarını raid0, raid5,raid6 ve raid10 olarak belirledim

raid0 da disklerin hepsini tek bir disk olarak görüyor ve teoride okuma ve yazma hızını disk adedince hızlandırıyor. diğer seçenekler içerisinde en hızlı disk erişimini raid0 sunuyor fakat herhangi bir hata toleransı olmadığı için disklerden biri arızalandığında tüm verilerinizi kaybediyorsunuz.

sanal sistemlerdeki verilerin değişme sıklığı ve yedekleme işleminin sıklığı göz önüne alınarak sizin için bir seçenek olabilir. tabi olası bir disk arızasında yeniden yapılandırma için geçecek süreyi de unutmamak lazım.

raid5 toplam disk sayısı - 1 kadar kullanılabilir alan sunuyor. hata toleransı 1 disk arızası. okuma hızı yuksek fakat yazma hızı parity den dolayı düşük. rebuild süresi uzun ve sistem açısından yorucu. ayrıca işlemciyi paritysiz yapılara oranla daha fazla yoruyor. ben boyle bir yapı için uygun görmedim.

raid6 toplam disk sayısı - 2 kadar kullanılabilir alan sunuyor. hata toleransı 2 disk arızası. raid5 için geçerli olan olumsuzluklar (bu kelime benim sistemim için geçerli. donanım destekli ve 4ün üzerinde disk içeren bir yapıda tercihim raid6 olurdu) bunun içinde geçerli.

raid10 toplam disk sayısı / 2 kadar kullanılabilir alan sunuyor. hata toleransı 2 disk arızası. parity kullanmıyor. benim için bu güzel bir şey. basitçe raid0+1 olarak biliniyor. donanıma bağlı olarak değişse de teoride, 4 diskli bir yapıda okuma ve yazma hızını iki misli artırıyor.

yukarıda belirttiğim düşüncelerinin tümü sahip olduğunuz donanım ve disk sayısına bağlı olarak değişiklik gösterebilir. ihtiyaçlarınızı belirleyerek (disk alanı, performans, güvenlik) elinizdeki donanıma uygun seçimi yapabilirisniz.

benim için en mantıklısı raid10 olarak görünüyor.


3) xenserver kurulumu esnasında herhangi bir veri deposu (storage repositories) seçmeden kurulumu 250gb disk üzerine yaptım.

4) fdisk -l komutu ile mevcut disklerin yapısını listeledim. kurulumu yaptığım disk sda, 500gb lik 4 disk sdb,sdc,sdd,sde ve daha ileride yedekler için kullanacağım 1tb lik disk sdf şeklinde görünüyor.

raid için kullanılacak diskleri fdisk ile yapılandırdım

fdisk /dev/sdc
o ile yani bir disk yapısı oluşturdum
n ile yeni bir partition ekledim
p ile primary 1 ile birinci bölümü seçtim
enter ve enter ile ön tanımlı değerleri seçerek diskin tamamını kullandım.
t ile diskin tipini değiştirmek istediğimi ve
fd ile Linu Software tipinde olacağını belirttim.
w ileyaptığım işlemleri disk üzerine kaydederek çıktım



[root@vserver ~]# fdisk /dev/sdc

The number of cylinders for this disk is set to 60801.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): o
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.


The number of cylinders for this disk is set to 60801.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-60801, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-60801, default 60801):
Using default value 60801

Command (m for help): p

Disk /dev/sdc: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdc1 1 60801 488384001 83 Linux

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)

Command (m for help): p

Disk /dev/sdc: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdc1 1 60801 488384001 fd Linux raid autodetect

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@vserver ~]#



diğer üç disk içinde aynı işlemi yaptım.

5) /dev dizini içerisinde md0 ı göremediğim için oluşturdum
mknod /dev/md0 b 9 0


6) aşağıdaki komut ile raid10 dizesini oluşturturdum
mdadm --create /dev/md0 --level=raid10 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1


7) çıkabilecek sorunlara karşılık raid yapısını mdadm.conf dosyasına yazdırdım
mdadm --detail --scan > /etc/mdadm.conf


8) aşağıdaki komut ile md0 raid bağlantı noktasını xenserver a yeni bir sr olarak ekledim
xe sr-create type=lvm content-type=user shared=false device-config:device=/dev/md0 name-label=raiddiskim


9) bu işlemden sonra XenCenter da "raiddiskim" ismi ile yeni bir storage oluşması gerekir.

artık sananl makinalarınızı bu disk üzerinde oluşturabilirsiniz ;)

not: rebuild işlemi disklerin boyutu ve donanıma bağlı olaral biraz zaman alacaktır ve bu esnada disk erişim performansı düşü olacaktır. test etmek işlemin bitmesini bekleyin.
mdadm --detail /dev/md0 komutu ile süreci takip edebilirsiniz.

Linux Support CDsini xenserver kurulumu bittikten sonra ISO dosyasından yüklemek

XenServer üzerinde sıkça kullandığım cdlerin image dosyaları için bir "CIFS ISO library" tanımladım ve support cdsini de buraya taşıdım.

Sizler iso ktüphanesi oluşturmak istemiyorsanız indirdiğiniz iso dosyasını winscp ile xenserver a transfer edebilir veya wget ile xenserver a indirebilirsiniz.

ssh ile konsola bağlandım ve ardından sırasıyla;

mount komutu ile iso kütüphanesinin bağlantı adresine baktım
//172.16.1.251/samba.bim.Yedekler on /var/run/sr-mount/672c638a-af49-2539-9ddd-fbad61652f27 type cifs (rw,mand)


iso dosyasını başlamak için mnt altında bir klasor olusturdum
mkdir /mnt/iso


mount komutu ile iso dosyasını /mnt/iso klasörüne bağladım
mount -o loop /var/run/sr-mount/672c638a-af49-2539-9ddd-fbad61652f27/iso_files/XenServer-5.5.0-Update2-linux-cd.iso /mnt/iso/


bağlantı noktasına giderek CDnin içeriğini listeledim

[root@vserver ~]# cd /mnt/iso/
[root@vserver iso]# ls -al
total 248
dr-xr-xr-x 4 root root 2048 Jan 12 21:58 .
drwxr-xr-x 3 root root 4096 Apr 12 12:20 ..
dr-xr-xr-x 2 root root 2048 Jan 12 21:24 client_install
-r--r--r-- 1 root root 26759 Jan 12 21:19 EULA
-r-xr-xr-x 1 root root 1817 Jan 12 21:58 install.sh
-r--r--r-- 1 root root 213207 Jan 12 21:19 LICENSES
dr-xr-xr-x 2 root root 2048 Jan 12 21:58 packages.linux
-r--r--r-- 1 root root 27 Jan 12 21:58 REVISION


CD nin içerisindeyken ./install.sh komutu ile yüklemeyi başlattım ve çok kısa bir süre sonra yükleme işlemi tamamlandı
[root@vserver iso]# ./install.sh
Warning: If you are in a pool, you must install this pack on all servers.
Starting installation of Linux Pack...

Verifying templates-debian...
Installing templates-debian...

Restarting XAPI...
Stopping xapi: .. [ OK ]
Starting xapi: .....start-of-day complete. [ OK ]
Linux pack installation complete.
[root@vserver iso]#

Salı, Eylül 29, 2009

Türk Telekom'un 25 nolu smtp portunu kapatması

Türk Telekom, kendisini pek çok listede ilk sıralara taşıyan spam mailleri azaltabilmek için sabit IPsi olmayan ADSL kullanıcılarının 25 numaralı smtp portuna erişimini engelledi. Hal böyle olunca, mail sunucu hizmeti veren kişi-kuruluşların sunucularında bazı düzeltmeler yapmaları şartı doğdu. Yapılması gerekenler sistemin yapısına göre değişiyor. Benim burada bahsedeceğim kimlik doğrulama seklinde hiç bir değişiklik yapmadan sadece Telekomun önerdiği 587 numaralı portu 25 numaralı porta yönlerdirmekten ibaret.

Mail sunucunuz Linux üzerinde çalışıyorsa;
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 587 -j REDIRECT --to-ports 25
iptables -A INPUT -p tcp -m tcp --dport 587 -j ACCEPT

komutu ile 587 numaralı porta gelen istekleri 25 e yönlendirebilirsiniz.

Sunucunuz Linux değilse veya iptables ile bu şekilde bir değişiklik yapmak istemiyorsanız kullandığınız firewall cihazı, router veya modem üzerinde de aynı değişikliği yapabilirisiniz. Cihazınızın port forvard - nat kısımlarında ilgili değişiklikleri bulabilirsiniz.

Pazar, Ekim 28, 2007

Rüyada boşluğa düştüğümüzde neden hiç yere çarptığımızı görmeyiz?

Bunu notu kendim ve denk gelenler için alıyorum;
Jack London'un Ademden Önce adlı romanını okurken bana çok ilginç gelen bir bölüm okudum. Burada hemen hemen hepimizin gördüğü boşluğa düşme rüyalarının ırksal birer anı olduğu ve bunun ağaçlarda yaşayan atalarımızdan miras kaldığı yazıyordu. Söylediğine göre, ilk insanlar (en azından bu rüyayı görenlerin ataları) kendilerini vahşi hayatın tehlikelerinden korumak için ağaçların tepesinde yaşıyorlardı ve düşerek ölmek onlar için olası ve çok ciddi bir tehlikeydi. Bu düşüş insanda öyle ciddi bir şok etkisi yapıyordu ki bu şok beyin hücrelerinde moleküler değişiklikler meydana getiriyor ve bu da DNA yoluyla ırksal bir anı bir refleks olarak sonraki kuşaklara aktarılıyordu.

Gelelim yazının başlığındaki soruya "Neden yere düştüğümüzü görmeyiz ?" : Asıl hoşuma giden bu kısım oldu. Bu acı deneyim yanlızca hayatta kalan atalarımız tarafından sonraki kuşaklara aktarılmışmış. Yani yere düşen atalar mefta :) haliyle gelecek kuşaklara yere çarpma deneyimlerini aktarma fırsatı bulamıyorlar.

Artık böyle bir rüyadan uyandığınızda "Ölseydinde bu rüyayı görmeseydim" diyebilirsiniz. ehehehe

Not: Yukarıda anlatılanların bilimsel bir temeli var mı? doğru mu yoksa yanlış mı? bilmiyorum. Kitap 1910 lu yıllarda yazılmış ve Darwinci düşüncenin etkisinde kalmış bir Fantazi ramanıdır.

Perşembe, Ekim 11, 2007

Eski UNIX sistemlerde 2GB'ın üzerinde oracle database exportu almak

Pek çok eski UNIX türevi dosya işlemlerinde(aslında genelinde) 32bit unsigned integer kullanmaktadır ve bunun sonucu olarakda en büyük dosya boyu 2gb ile sınırlı kalmaktadır.

Oracle Export /Import araçları işletim sisteminin orjinal sistem çağrılarıyla yazılmıştır. Bu, işletim sisteminiz izin vermediği sürece 2gb ın üzerinde export veya import yapamayacağınız anlamına gelir. Üzülmeyin, UNIX sistemlerde bununda üstesinden gelmenin yolları var ;)

Oracle 8i ve sonraki versiyonlarda export ve import komutlarına filesize isimli yeni bir parametre eklendi. Bu parametre sayesinde export dosyasının boyutunu belirliyebilmemize izin vermiştir. Burada önemli olan iki nokta var;
1-) export alırken dosya boyunu enfazla 2000m olarak vermeliyiz
exp system/manager file=big.dmp filesize=2000M full=y
2-) import işleminde, export işleminde belirtilen dosya boyu aynı şekilde kullanılmalı
imp system/manager file=big.dmpfilesize=2000M full=y

Oracle 8i den önceki versiyonlar için ise split komutu ve pipe işlemleri ile 2GB limitine takılmadan export işlemin devam etmesini sağlıyabiliriz.
örnek1:
# pipe işleminde kullanacağımız özel bir dosya oluşturalım
mknod pipe.dmp p

# split -b 2000m komutu kendisine parametre olarak verilen dosyayı okur ve her 2000mb
# de dosyayı xaa xab xac şeklinde isimlendirerek böler. Bu örnekte, exp komutu
# pipe.dmp dosyasına export ettikce split komutu onu okuyacak ve her 2000mb de sıralı
# şekilde yeni dosyalar üretecektir.
#not:
# çok eski bazı unix türevlerinde split komutu -b parametresi almaz. bunu yerine
# komuttan hemen sonra bölünmesini istediğiniz satır sayısını yazmanızı bekler.
# 2000mb lik bir export dosyasının kaç satır alabileceği tablo yapısına ve veri boyuna
# göre değişecektir. Yani size bunu için tam bir rakam söyleyemem ama 500000 başlngıç
# için iyi bir rakam olabilir ;)
split -b 2000m < pipe.dmp & exp system/manager file=pipe.dmp full=y

#export işlemi tamalandıktan sonra oluşturduğumu özel dosyamızı silelim
rm pipe.dmp

Bu işlem sonucunda oluşacak dosyaları yine 2GB sorunu olan bir unix makinada kullanacaksanız import işlemi için
# pipe işleminde kullanacağımız özel bir dosya oluşturalım
mknod pipe.dmp p

# export işleminden elde ettiğimiz SIRALI dosyaları sırasını bozmadan
# cat komutu ile özel dosyamıza yazdıralım ve bu dosyadanda import
# işlemini gerçekleştirelim
cat xaa xab xac > pipe.dmp & imp system/manager file=pipe.dmp full=y

# importişlemi tamalandıktan sonra oluşturduğumu özel dosyamızı silelim
rm pipe.dmp

yöntem2:
Bu yöntem ile oluşan export dosyası compress komutu ile sıkıştırılır ve böylelikle 2GB limitine ulaşmadan önce yaklaşık 10Gb a kadar export yapılabilir. Eğer export dosyanız gerçekten çok büyükse bu işlem sizin için kullanışlı olmayabilir.

mknod pipe.dmp p
compress < pipe.dmp > expdat.dmp.Z & exp system/manager file=pipe.dmp full=y
rmpipe.dmp


Oluşan bu dosyanın importu için;
mknodpipe.dmp p
uncompress expdat.dmp.Z > pipe.dmp & imp system/manager file=pipe.dmp full=y
rm pipe.dmp

keşke export / importun en üzücü yanı dosya boyu olsa değil mi :) neyse, en azından bunun için kafa patlatmayacaksınız artık. hepinize kolay gelsin ;)

Çarşamba, Ağustos 22, 2007

Ne vicdan azabı duyuyorum, ne kuşku,
Ne cehennem, ne şeytan korkusu -
Buna karşılık bütün sevincim bitti,
Aklım hiçbir şeye ermedi gitti

-alıntı Faust