출처 : http://blog.naver.com/want813/90035756222


본인은 현재

/dev/md5 에 /dev/sda1, /dev/sdb1, /dev/sdc1, /dev/sdd1 을 사용중이며,

/dev/md5 를 /md5data 에 mount 해서 사용중이다.

 

/dev/sdc1 을 삭제해서 복구 테스트를 할 예정이다.

 

 

1. fail, remove disk

# umount /md5data ( 이 과정이 필요한지 아닌지.. 테스트 해보지 않았다 -_-;;)

# mdadm --manage /dev/md5 --fail /dev/sdc1 ( /dev/sdc1 을 faile 시킨다 )

# mdadm --detail /dev/md5

/dev/md5:

        Version : 00.90.03

  Creation Time : Thu Oct  2 20:58:52 2008

     Raid Level : raid5

     Array Size : 1465151808 (1397.28 GiB 1500.32 GB)

  Used Dev Size : 488383936 (465.76 GiB 500.11 GB)

   Raid Devices : 4

  Total Devices : 4

Preferred Minor : 5

    Persistence : Superblock is persistent

 

    Update Time : Mon Oct  6 11:23:04 2008

          State : clean, degraded

 Active Devices : 3

Working Devices : 3

 Failed Devices : 1

  Spare Devices : 0

 

         Layout : left-symmetric

     Chunk Size : 64K

 

           UUID : 0a75c94d:90e12dc2:17caabb6:a4c6ef14

         Events : 0.190

 

    Number   Major   Minor   RaidDevice State

       0       8        1        0      active sync   /dev/sda1

       1       8       17        1      active sync   /dev/sdb1

       3       8       49        3      active sync   /dev/sdd1

 

       4       8       33        -      faulty spare   /dev/sdc1

# cat /proc/mdstat

Personalities : [raid6] [raid5] [raid4]

md5 : active raid5 sdc1[4](F) sda1[0] sdd1[3] sdb1[1]

      1465151808 blocks level 5, 64k chunk, algorithm 2 [4/3] [UU_U]

     

unused devices: <none>

# mdadm --manage /dev/md5 --remove /dev/sdc1

mdadm: hot removed /dev/sdc1

# mdadm --detail /dev/md5

/dev/md5:

        Version : 00.90.03

  Creation Time : Thu Oct  2 20:58:52 2008

     Raid Level : raid5

     Array Size : 1465151808 (1397.28 GiB 1500.32 GB)

  Used Dev Size : 488383936 (465.76 GiB 500.11 GB)

   Raid Devices : 4

  Total Devices : 3

Preferred Minor : 5

    Persistence : Superblock is persistent

 

    Update Time : Mon Oct  6 11:27:08 2008

          State : clean, degraded

 Active Devices : 3

Working Devices : 3

 Failed Devices : 0

  Spare Devices : 0

 

         Layout : left-symmetric

     Chunk Size : 64K

 

           UUID : 0a75c94d:90e12dc2:17caabb6:a4c6ef14

         Events : 0.192

 

    Number   Major   Minor   RaidDevice State

       0       8        1        0      active sync   /dev/sda1

       1       8       17        1      active sync   /dev/sdb1

       2       0        0        2      removed

       3       8       49        3      active sync   /dev/sdd1

# cat /proc/mdstat

Personalities : [raid6] [raid5] [raid4]

md5 : active raid5 sda1[0] sdd1[3] sdb1[1]

      1465151808 blocks level 5, 64k chunk, algorithm 2 [4/3] [UU_U]

     

unused devices: <none>

# mount /dev/md5 /md5data

( application 이 잘 작동 되는지 확인 )

# reboot

 ................................................................................................................

# mdadm --manage /dev/md5 --add /dev/sdc1

mdadm: re-added /dev/sdc1

# mdadm --detail /dev/md5

/dev/md5:

        Version : 00.90.03

  Creation Time : Thu Oct  2 20:58:52 2008

     Raid Level : raid5

     Array Size : 1465151808 (1397.28 GiB 1500.32 GB)

  Used Dev Size : 488383936 (465.76 GiB 500.11 GB)

   Raid Devices : 4

  Total Devices : 4

Preferred Minor : 5

    Persistence : Superblock is persistent

 

    Update Time : Mon Oct  6 11:33:35 2008

          State : clean, degraded, recovering

 Active Devices : 3

Working Devices : 4

 Failed Devices : 0

  Spare Devices : 1

 

         Layout : left-symmetric

     Chunk Size : 64K

 

 Rebuild Status : 0% complete

 

           UUID : 0a75c94d:90e12dc2:17caabb6:a4c6ef14

         Events : 0.204

 

    Number   Major   Minor   RaidDevice State

       0       8        1        0      active sync   /dev/sda1

       1       8       17        1      active sync   /dev/sdb1

       4       8       33        2      spare rebuilding   /dev/sdc1

       3       8       49        3      active sync   /dev/sdd1

# cat /proc/mdstat

Personalities : [raid6] [raid5] [raid4]

md5 : active raid5 sdc1[4] sda1[0] sdd1[3] sdb1[1]

      1465151808 blocks level 5, 64k chunk, algorithm 2 [4/3] [UU_U]

      [>....................]  recovery =  0.3% (1895068/488383936) finish=174.5min speed=46460K/sec

     

unused devices: <none>

'IT인생_스크랩 > Linux' 카테고리의 다른 글

centOS, mdadm raid5 복구 테스트  (0) 2011.09.21
centOS5, mdadm 을 이용한 raid5 구성  (0) 2011.09.21
Linux mdadm man Page  (0) 2011.09.21
[linux]ssh-keygen(scp사용시 암호없이 사용)  (0) 2011.08.29
Linux rsync 사용법  (0) 2011.08.29
Time Server Operation (NTP)  (0) 2010.12.27

( * mdadm 이 없으면 설치를 한다. 
# yum -y install mdadm ) 

 

1. raid 로 구성할 디스크들 fdisk 로 파티션 설정

( 본인은 /dev/sda1, /dev/sdb1, /dev/sdc1, /dev/sdd1 사용)

 

# fdisk /dev/sda1 (4개 모두)

 

command : n (add a new partition)
p (primary partition 1-4)
1 (partition number)
[enter] (first cylinder)
[enter] (last cylinder or +size pr +sizeM or +sizeK([1]-1024)) <-- 원하는 값으로..
command : t (change a partition's system id)
fd (Linux raid autodetect)
w (write table to disk and exit) or q (quit without saving changes)

 

* fdisk 사용 법 : http://wiki.kldp.org/wiki.php/fdisk#s-2

 

 

2. 리눅스 리부팅

 

# reboot

 

 

3. fdisk 확인

 

# fdisk -l /dev/sda1

# fdisk -l /dev/sdb1

# fdisk -l /dev/sdc1

# fdiek -l /dev/sdd1

 

 

4. mdadm.conf 생성

# cd /etc

# vi mdadm.conf

DEVICE /dev/sd[abcd]1
ARRAY /dev/md5 devices=/dev/sda1,/dev/sdb1,/dev/sdc1,/dev/sdd1

* 부팅시 자동으로 raid 구성한 것이 올라오도록 할때 필요하다.

* 인터넷의 많은 자료들이.. 이 부분을.. 빼먹은 것이 하도 많아서.. ㅠ 고생 좀 했다.

 

 

5. raid5 구성 (디스크가 3개 이상일 때)

 

# mknod /dev/md5 b 9 5

# mdadm --create /dev/md5 --level=5 --raid-devices=4 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1 

* prompt 창이 나오거든 y + enter

 

 

6. raid 확인

 

# mdadm --detail /dev/md5

(raid 구성 확인)

# cat /proc/mdstat

( 4개 일때 [UUU_] 이면 성공, 한마디로 U 가 n-1 개 일때 성공, _ 는 spare )

 

 

6. 포맷하기

 

# mkfs.ext3 /dev/md5
or # mkfs -t ext3 /dev/md5

 

 

7. mount 하기

 

# mount /dev/md5 /data

# vi /etc/fstab (부팅시 자동으로 마운트 될 수 있게)

/dev/md5     /data     ex3t     defaults     1     0

 

* fstab 을 잘못수정하면 부팅이 제대로 되지 않는다. 그럴땐...

http://kin.naver.com/detail/detail.php?d1id=1&dir_id=10202&eid=tnqDWUPmUt/5+ofx3Qn/+pc/v1+cga90&qb=uK60qr26IHJlYWRvbmx5IMbEwM8guq+w5g==

 

 

 

 

- 참고 사이트

raid5 구성 : http://blog.naver.com/malsik2004?Redirect=Log&logNo=150019685750

http://blog.naver.com/chois76?Redirect=Log&logNo=110028229042

fdisk 사용법 : http://wiki.kldp.org/wiki.php/fdisk#s-2

raid1 구성 : http://blog.naver.com/ares2011/50023102754

raid 개념: http://blog.naver.com/hitman0906?Redirect=Log&logNo=110029198064

mkraid 이용 : http://blog.naver.com/comki?Redirect=Log&logNo=100010920194

madm.conf 설정 : http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-ig-s390-multi-ko-4/s1-s390info-raid.html

fstab 복구 :

http://kin.naver.com/detail/detail.php?d1id=1&dir_id=10202&eid=tnqDWUPmUt/5+ofx3Qn/+pc/v1+cga90&qb=uK60qr26IHJlYWRvbmx5IMbEwM8guq+w5g==


출처 : http://blog.naver.com/want813/90035629751

'IT인생_스크랩 > Linux' 카테고리의 다른 글

centOS, mdadm raid5 복구 테스트  (0) 2011.09.21
centOS5, mdadm 을 이용한 raid5 구성  (0) 2011.09.21
Linux mdadm man Page  (0) 2011.09.21
[linux]ssh-keygen(scp사용시 암호없이 사용)  (0) 2011.08.29
Linux rsync 사용법  (0) 2011.08.29
Time Server Operation (NTP)  (0) 2010.12.27

NAME

mdadm - manage MD devices aka Linux Software Raid.

 

SYNOPSIS

mdadm [mode] <raiddevice> [options] <component-devices>

 

DESCRIPTION

RAID devices are virtual devices created from two or more real block devices. This allows multiple devices (typically disk drives or partitions there-of) to be combined into a single device to hold (for example) a single filesystem. Some RAID levels include redundancy and so can survive some degree of device failure.

Linux Software RAID devices are implemented through the md (Multiple Devices) device driver.

Currently, Linux supports LINEAR md devices, RAID0 (striping), RAID1 (mirroring), RAID4, RAID5, RAID6, and MULTIPATH.

MULTIPATH is not a Software RAID mechanism, but does involve multiple devices. For MULTIPATH each device is a path to one common physical storage device.

mdadm is a program that can be used to create, manage, and monitor MD devices. As such it provides a similar set of functionality to the raidtools packages. The key differences between mdadm and raidtools are:

*
mdadm is a single program and not a collection of programs.
*
mdadm can perform (almost) all of its functions without having a configuration file and does not use one by default. Also mdadm helps with management of the configuration file.
*
mdadm can provide information about your arrays (through Query, Detail, and Examine) that raidtools cannot. mdadm does not use /etc/raidtab, the raidtools configuration file, at all. It has a different configuration file with a different format and an different purpose.

 

MODES

mdadm has 7 major modes of operation:
Assemble
Assemble the parts of a previously created array into an active array. Components can be explicitly given or can be searched for. mdadm checks that the components do form a bona fide array, and can, on request, fiddle superblock information so as to assemble a faulty array.

Build
Build a legacy array without per-device superblocks.

Create
Create a new array with per-device superblocks.

Manage
This is for doing things to specific components of an array such as adding new spares and removing faulty devices.

Misc
This mode allows operations on independent devices such as examine MD superblocks, erasing old superblocks and stopping active arrays.

Follow or Monitor
Monitor one or more md devices and act on any state changes. This is only meaningful for raid1, 4, 5, 6 or multipath arrays as only these have interesting state. raid0 or linear never have missing, spare, or failed drives, so there is nothing to monitor.

Grow
Grow (or shrink) an array, or otherwise reshape it in some way. Currently supported growth options including changing the active size of componenet devices in RAID level 1/4/5/6 and changing the number of active devices in RAID1.

 

OPTIONS

Available options are:

-A, --assemble
Assemble a pre-existing array.

-B, --build
Build a legacy array without superblocks.

-C, --create
Create a new array.

-Q, --query
Examine a device to see (1) if it is an md device and (2) if it is a component of an md array. Information about what is discovered is presented.

-D, --detail
Print detail of one or more md devices.

-E, --examine
Print content of md superblock on device(s).

-F, --follow, --monitor
Select Monitor mode.

-G, --grow
Change the size or shape of an active array.

-h, --help
Display help message or, after above option, mode specific help message.

--help-options
Display more detailed help about command line parsing and some commonly used options.

-V, --version
Print version information for mdadm.

-v, --verbose
Be more verbose about what is happening.

-b, --brief
Be less verbose. This is used with --detail and --examine.

-f, --force
Be more forceful about certain operations. See the various modes of the exact meaning of this option in different contexts.

-c, --config=
Specify the config file. Default is /etc/mdadm.conf. If the config file given is partitions then nothing will be read, but mdadm will act as though the config file contained exactly DEVICE partitions and will read /proc/partitions to find a list of devices to scan. If the word none is given for the config file, then mdadm will act as though the config file were empty.

-s, --scan
scan config file or /proc/mdstat for missing information. In general, this option gives mdadm permission to get any missing information, like component devices, array devices, array identities, and alert destination from the configuration file: /etc/mdadm.conf. One exception is MISC mode when using --detail or --stop in which case --scan says to get a list of array devices from /proc/mdstat.

 

For create or build:

-c, --chunk=
Specify chunk size of kibibytes. The default is 64.

--rounding=
Specify rounding factor for linear array (==chunk size)

-l, --level=
Set raid level. When used with --create, options are: linear, raid0, 0, stripe, raid1, 1, mirror, raid4, 4, raid5, 5, raid6, 6, multipath, mp. Obviously some of these are synonymous.

When used with --build, only linear, raid0, 0, stripe are valid.

-p, --parity=
Set raid5 parity algorithm. Options are: left-asymmetric, left-symmetric, right-asymmetric, right-symmetric, la, ra, ls, rs. The default is left-symmetric.

--layout=
same as --parity

-n, --raid-devices=
Specify the number of active devices in the array. This, plus the number of spare devices (see below) must equal the number of component-devices (including "missing" devices) that are listed on the command line for --create. Setting a value of 1 is probably a mistake and so requires that --force be specified first. A value of 1 will then be allowed for linear, multipath, raid0 and raid1. It is never allowed for raid4 or raid5.
This number can only be changed using --grow for RAID1 arrays, and only on kernels which provide necessary support.

-x, --spare-devices=
Specify the number of spare (eXtra) devices in the initial array. Spares can also be added and removed later. The number of component devices listed on the command line must equal the number of raid devices plus the number of spare devices.

-z, --size=
Amount (in Kibibytes) of space to use from each drive in RAID1/4/5/6. This must be a multiple of the chunk size, and must leave about 128Kb of space at the end of the drive for the RAID superblock. If this is not specified (as it normally is not) the smallest drive (or partition) sets the size, though if there is a variance among the drives of greater than 1%, a warning is issued.

This value can be set with --grow for RAID level 1/4/5/6. If the array was created with a size smaller than the currently active drives, the extra space can be accessed using --grow.

--assume-clean
Tell mdadm that the array pre-existed and is known to be clean. This is only really useful for Building RAID1 array. Only use this if you really know what you are doing. This is currently only supported for --build.

-R, --run
Insist that mdadm run the array, even if some of the components appear to be active in another array or filesystem. Normally mdadm will ask for confirmation before including such components in an array. This option causes that question to be suppressed.

-f, --force
Insist that mdadm accept the geometry and layout specified without question. Normally mdadm will not allow creation of an array with only one device, and will try to create a raid5 array with one missing drive (as this makes the initial resync work faster). With --force, mdadm will not try to be so clever.

-a, --auto{=no,yes,md,mdp,part,p}{NN}
Instruct mdadm to create the device file if needed, and to allocate an unused minor number. "yes" or "md" causes a non-partitionable array to be used. "mdp", "part" or "p" causes a partitionable array (2.6 and later) to be used. The argumentment can also come immediately after "-a". e.g. "-ap".

For partitionable arrays, mdadm will create the device file for the whole array and for the first 4 partitions. A different number of partitions can be specified at the end of this option (e.g. --auto=p7). If the device name ends with a digit, the partition names add an underscore, a 'p', and a number, e.g. "/dev/home1_p3". If there is no trailing digit, then the partition names just have a number added, e.g. "/dev/scratch3".

 

For assemble:

-u, --uuid=
uuid of array to assemble. Devices which don't have this uuid are excluded

-m, --super-minor=
Minor number of device that array was created for. Devices which don't have this minor number are excluded. If you create an array as /dev/md1, then all superblocks will contain the minor number 1, even if the array is later assembled as /dev/md2.

Giving the literal word "dev" for --super-minor will cause mdadm to use the minor number of the md device that is being assembled. e.g. when assembling /dev/md0, will look for super blocks with a minor number of 0.

-f, --force
Assemble the array even if some superblocks appear out-of-date

-R, --run
Attempt to start the array even if fewer drives were given than are needed for a full array. Normally if not all drives are found and --scan is not used, then the array will be assembled but not started. With --run an attempt will be made to start it anyway.

-a, --auto{=no,yes,md,mdp,part}
See this option under Create and Build options.

-U, --update=
Update the superblock on each device while assembling the array. The argument given to this flag can be one of sparc2.2, summaries, or super-minor.

The sparc2.2 option will adjust the superblock of an array what was created on a Sparc machine running a patched 2.2 Linux kernel. This kernel got the alignment of part of the superblock wrong. You can use the --examine --sparc2.2 option to mdadm to see what effect this would have.

The super-minor option will update the prefered minor field on each superblock to match the minor number of the array being assembled. This is not needed on 2.6 and later kernels as they make this adjustment automatically.

The summaries option will correct the summaries in the superblock. That is the counts of total, working, active, failed, and spare devices.

 

For Manage mode:

-a, --add
hotadd listed devices.

-r, --remove
remove listed devices. They must not be active. i.e. they should be failed or spare devices.

-f, --fail
mark listed devices as faulty.

--set-faulty
same as --fail.

 

For Examine mode:

--sparc2.2
In an array was created on a 2.2 Linux kernel patched with RAID support, the superblock will have been created incorrectly, or at least incompatibly with 2.4 and later kernels. Using the --sparc2.2 flag with --examine will fix the superblock before displaying it. If this appears to do the right thing, then the array can be successfully assembled using --assemble --update=sparc2.2.

 

For Misc mode:

-R, --run
start a partially built array.

-S, --stop
deactivate array, releasing all resources.

-o, --readonly
mark array as readonly.

-w, --readwrite
mark array as readwrite.

--zero-superblock
If the device contains a valid md superblock, the block is over-written with zeros. With --force the block where the superblock would be is over-written even if it doesn't appear to be valid.

-t, --test
When used with --detail, the exit status of mdadm is set to reflect the status of the device.

 

For Monitor mode:

-m, --mail
Give a mail address to send alerts to.

-p, --program, --alert
Give a program to be run whenever an event is detected.

-d, --delay
Give a delay in seconds. mdadm polls the md arrays and then waits this many seconds before polling again. The default is 60 seconds.

-f, --daemonise
Tell mdadm to run as a background daemon if it decides to monitor anything. This causes it to fork and run in the child, and to disconnect form the terminal. The process id of the child is written to stdout. This is useful with --scan which will only continue monitoring if a mail address or alert program is found in the config file.

-1, --oneshot
Check arrays only once. This will generate NewArray events and more significantly DegradedArray events. Running mdadm --monitor --scan -1 from a cron script will ensure regular notification of any degraded arrays.

-t, --test
Generate a TestMessage alert for every array found at startup. This alert gets mailed and passed to the alert program. This can be used for testing that alert message to get through successfully.

 

ASSEMBLE MODE


Usage: mdadm --assemble md-device options-and-component-devices...

Usage: mdadm --assemble --scan md-devices-and-options...

Usage: mdadm --assemble --scan options...

This usage assembles one or more raid arrays from pre-existing components. For each array, mdadm needs to know the md device, the identity of the array, and a number of component-devices. These can be found in a number of ways.

In the first usage example (without the --scan) the first device given is the md device. In the second usage example, all devices listed are treated as md devices and assembly is attempted. In the third (where no devices are listed) all md devices that are listed in the configuration file are assembled.

If precisely one device is listed, but --scan is not given, then mdadm acts as though --scan was given and identify information is extracted from the configuration file.

The identity can be given with the --uuid option, with the --super-minor option, can be found in the config file, or will be taken from the super block on the first component-device listed on the command line.

Devices can be given on the --assemble command line or in the config file. Only devices which have an md superblock which contains the right identity will be considered for any array.

The config file is only used if explicitly named with --config or requested with (a possibly implicit) --scan. In the later case, /etc/mdadm.conf is used.

If --scan is not given, then the config file will only be used to find the identity of md arrays.

Normally the array will be started after it is assembled. However if --scan is not given and insufficient drives were listed to start a complete (non-degraded) array, then the array is not started (to guard against usage errors). To insist that the array be started in this case (as may work for RAID1, 4, 5 or 6), give the --run flag.

If an auto option is given, either on the command line (--auto) or in the configuration file (e.g. auto=part), then mdadm will create the md device if necessary or will re-create it if it doesn't look usable as it is.

This can be useful for handling partitioned devices (which don't have a stable device number - it can change after a reboot) and when using "udev" to manage your /dev tree (udev cannot handle md devices because of the unusual device initialisation conventions).

If the option to "auto" is "mdp" or "part" or (on the command line only) "p", then mdadm will create a partitionable array, using the first free one that is not inuse, and does not already have an entry in /dev (apart from numeric /dev/md* entries).

If the option to "auto" is "yes" or "md" or (on the command line) nothing, then mdadm will create a traditional, non-partitionable md array.

It is expected that the "auto" functionality will be used to create device entries with meaningful names such as "/dev/md/home" or "/dev/md/root", rather than names based on the numerical array number.

When using this option to create a partitionable array, the device files for the first 4 partitions are also created. If a different number is required it can be simply appended to the auto option. e.g. "auto=part8". Partition names are created by appending a digit string to the device name, with an intervening "_p" if the device name ends with a digit.

The --auto option is also available in Build and Create modes. As those modes do not use a config file, the "auto=" config option does not apply to these modes.

 

BUILD MODE


Usage: mdadm --build device --chunk=X --level=Y --raid-devices=Z devices

This usage is similar to --create. The difference is that it creates a legacy array without a superblock. With these arrays there is no difference between initially creating the array and subsequently assembling the array, except that hopefully there is useful data there in the second case.

The level may only be 0, raid0, or linear. All devices must be listed and the array will be started once complete.

 

CREATE MODE


Usage: mdadm --create device --chunk=X --level=Y
--raid-devices=Z devices

This usage will initialise a new md array, associate some devices with it, and activate the array.

This the --auto option is given (as described in more detail in the section on Assemble mode), then the md device will be created with a suitable device number if necessary.

As devices are added, they are checked to see if they contain raid superblocks or filesystems. They are also checked to see if the variance in device size exceeds 1%.

If any discrepancy is found, the array will not automatically be run, though the presence of a --run can override this caution.

To create a "degraded" array in which some devices are missing, simply give the word "missing" in place of a device name. This will cause mdadm to leave the corresponding slot in the array empty. For a RAID4 or RAID5 array at most one slot can be "missing"; for a RAID6 array at most two slots. For a RAID1 array, only one real device needs to be given. All of the others can be "missing".

When creating a RAID5 array, mdadm will automatically create a degraded array with an extra spare drive. This is because building the spare into a degraded array is in general faster than resyncing the parity on a non-degraded, but not clean, array. This feature can be over-ridden with the -I --force option.

The General Management options that are valid with --create are:

--run
insist on running the array even if some devices look like they might be in use.

--readonly
start the array readonly - not supported yet.

 

MANAGE MODE


Usage: mdadm device options... devices...

This usage will allow individual devices in an array to be failed, removed or added. It is possible to perform multiple operations with on command. For example:
mdadm /dev/md0 -f /dev/hda1 -r /dev/hda1 -a /dev/hda1
will firstly mark /dev/hda1 as faulty in /dev/md0 and will then remove it from the array and finally add it back in as a spare. However only one md array can be affected by a single command.

 

MISC MODE


Usage: mdadm options ... devices ...

MISC mode includes a number if distinct operations that operate on distinct devices. The operations are:

--query
The device is examined to see if it is (1) an active md array, or (2) a component of an md array. The information discovered is reported.

--detail
The device should be an active md device. mdadm will display a detailed description of the array. --brief or --scan will cause the output to be less detailed and the format to be suitable for inclusion in /etc/mdadm.conf. The exit status of mdadm will normally be 0 unless mdadm failed to get useful information about the device(s). However if the --test option is given, then the exit status will be:

0
The array is functioning normally.
1
The array has at least one failed device.
2
The array has multiple failed devices and hence is unusable (raid4 or raid5).
4
There was an error while trying to get information about the device.

--examine
The device should be a component of an md array. mdadm will read the md superblock of the device and display the contents. If --brief is given, or --scan then multiple devices that are components of the one array are grouped together and reported in a single entry suitable for inclusion in /etc/mdadm.conf.

Having --scan without listing any devices will cause all devices listed in the config file to be examined.

--stop
The devices should be active md arrays which will be deactivated, as long as they are not currently in use.

--run
This will fully activate a partially assembled md array.

--readonly
This will mark an active array as read-only, providing that it is not currently being used.

--readwrite
This will change a readonly array back to being read/write.

--scan
For all operations except --examine, --scan will cause the operation to be applied to all arrays listed in /proc/mdstat. For --examine, --scan causes all devices listed in the config file to be examined.

 

MONITOR MODE


Usage: mdadm --monitor options... devices...

This usage causes mdadm to periodically poll a number of md arrays and to report on any events noticed. mdadm will never exit once it decides that there are arrays to be checked, so it should normally be run in the background.

As well as reporting events, mdadm may move a spare drive from one array to another if they are in the same spare-group and if the destination array has a failed drive but not spares.

If any devices are listed on the command line, mdadm will only monitor those devices. Otherwise all arrays listed in the configuration file will be monitored. Further, if --scan is given, then any other md devices that appear in /proc/mdstat will also be monitored.

The result of monitoring the arrays is the generation of events. These events are passed to a separate program (if specified) and may be mailed to a given E-mail address.

When passing event to program, the program is run once for each event and is given 2 or 3 command-line arguements. The first is the name of the event (see below). The second is the name of the md device which is affected, and the third is the name of a related device if relevant, such as a component device that has failed.

If --scan is given, then a program or an E-mail address must be specified on the command line or in the config file. If neither are available, then mdadm will not monitor anything. Without --scan mdadm will continue monitoring as long as something was found to monitor. If no program or email is given, then each event is reported to stdout.

The different events are:


DeviceDisappeared
An md array which previously was configured appears to no longer be configured.

RebuildStarted
An md array started reconstruction.

RebuildNN
Where NN is 20, 40, 60, or 80, this indicates that rebuild has passed that many percentage of the total.

RebuildFinished
An md array that was rebuilding, isn't any more, either because it finished normally or was aborted.

Fail
An active component device of an array has been marked as faulty.

FailSpare
A spare component device which was being rebuilt to replace a faulty device has failed.

SpareActive
A spare component device which was being rebuilt to replace a faulty device as been successfully rebuild and has been made active.

NewArray
A new md array has been detected in the /proc/mdstat file.

DegradedArray
A newly noticed array appears to be degraded. This message is not generated when mdadm notices a drive failure which causes degradation, but only when mdadm notices that an array is degraded when it first sees the array.

MoveSpare
A spare drive has been moved from one array in a spare-group to another to allow a failed drive to be replaced.

TestMessage
An array was found at startup, and the --test flag was given.

Only Fail , FailSpare , DegradedArray , and TestMessage cause Email to be sent. All events cause the program to be run. The program is run with two or three arguments, they being the event name, the array device and possibly a second device.

Each event has an associated array device (e.g. /dev/md1) and possibly a second device. For Fail, FailSpare, and SpareActive the second device is the relevant component device. For MoveSpare the second device is the array that the spare was moved from.

For mdadm to move spares from one array to another, the different arrays need to be labelled with the same spare-group in the configuration file. The spare-group name can be any string. It is only necessary that different spare groups use different names.

When mdadm detects that an array which is in a spare group has fewer active devices than necessary for the complete array, and has no spare devices, it will look for another array in the same spare group that has a full complement of working drive and a spare. It will then attempt to remove the spare from the second drive and add it to the first. If the removal succeeds but the adding fails, then it is added back to the original array.

 

GROW MODE

The GROW mode is used for changing the size or shape of an active array. For this to work, the kernel must support the necessary change. Various types of growth may be added during 2.6 development, possibly including restructuring a raid5 array to have more active devices.

Currently the only support available is to change the "size" attribute for arrays with redundancy, and the raid-disks attribute of RAID1 arrays.

Normally when an array is build the "size" it taken from the smallest of the drives. If all the small drives in an arrays are, one at a time, removed and replaced with larger drives, then you could have an array of large drives with only a small amount used. In this situation, changing the "size" with "GROW" mode will allow the extra space to start being used. If the size is increased in this way, a "resync" process will start to make sure the new parts of the array are synchronised.

Note that when an array changes size, any filesystem that may be stored in the array will not automatically grow to use the space. The filesystem will need to be explicitly told to use the extra space.

A RAID1 array can work with any number of devices from 1 upwards (though 1 is not very useful). There may be times which you want to increase or decrease the number of active devices. Note that this is different to hot-add or hot-remove which changes the number of inactive devices.

When reducing the number of devices in a RAID1 array, the slots which are to be removed from the array must already be vacant. That is, the devices that which were in those slots must be failed and removed.

When the number of devices is increased, any hot spares that are present may be activated immediately.

 

EXAMPLES

mdadm --query /dev/name-of-device
This will find out if a given device is a raid array, or is part of one, and will provide brief information about the device.

mdadm --assemble --scan
This will assemble and start all arrays listed in the standard confile file. This command will typically go in a system startup file.

mdadm --stop --scan
This will shut down all array that can be shut down (i.e. are not currently in used). This will typically going in a system shutdown script.

mdadm --follow --scan --delay=120
If (and only if) there is an Email address or program given in the standard config file, then monitor the status of all arrays listed in that file by polling them ever 2 minutes.

mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/hd[ac]1
Create /dev/md0 as a RAID1 array consisting of /dev/hda1 and /dev/hdc1.


echo 'DEVICE /dev/hd*[0-9] /dev/sd*[0-9]' > mdadm.conf
mdadm --detail --scan >> mdadm.conf
This will create a prototype config file that describes currently active arrays that are known to be made from partitions of IDE or SCSI drives. This file should be reviewed before being used as it may contain unwanted detail.

echo 'DEVICE /dev/hd[a-z] /dev/sd*[a-z]' > mdadm.conf
mdadm --examine --scan --config=mdadm.conf >> mdadm.conf This will find what arrays could be assembled from existign IDE and SCSI whole drives (not partitions) and store the information is the format of a config file. This file is very likely to contain unwanted detail, particularly the devices= entries. It should be reviewed and edited before being used as an actual config file.

mdadm --examine --brief --scan --config=partitions
mdadm -Ebsc partitions
Create a list of devices by reading /proc/partitions, scan these for RAID superblocks, and printout a brief listing of all that was found.

mdadm -Ac partitions -m 0 /dev/md0
Scan all partitions and devices listed in /proc/partitions and assemble /dev/md0 out of all such devices with a RAID superblock with a minor number of 0.

mdadm --monitor --scan --daemonise > /var/run/mdadm
If config file contains a mail address or alert program, run mdadm in the background in monitor mode monitoring all md devices. Also write pid of mdadm daemon to /var/run/mdadm.

mdadm --create --help
Providew help about the Create mode.

mdadm --config --help
Provide help about the format of the config file.

mdadm --help
Provide general help.

 

FILES

 

/proc/mdstat

If you're using the /proc filesystem, /proc/mdstat lists all active md devices with information about them. mdadm uses this to find arrays when --scan is given in Misc mode, and to monitor array reconstruction on Monitor mode.

 

/etc/mdadm.conf

The config file lists which devices may be scanned to see if they contain MD super block, and gives identifying information (e.g. UUID) about known MD arrays. See mdadm.conf(5) for more details.

 

NOTE

mdadm was previously known as mdctl.
   

SEE ALSO

For information on the various levels of RAID, check out:


http://ostenfeld.dk/~jakob/Software-RAID.HOWTO/

for new releases of the RAID driver check out:


ftp://ftp.kernel.org/pub/linux/kernel/people/mingo/raid-patches

or


http://www.cse.unsw.edu.au/~neilb/patches/linux-stable/

mdadm.conf(5), md(4).

raidtab(5), raid0run(8), raidstop(8), mkraid(8)


'IT인생_스크랩 > Linux' 카테고리의 다른 글

centOS, mdadm raid5 복구 테스트  (0) 2011.09.21
centOS5, mdadm 을 이용한 raid5 구성  (0) 2011.09.21
Linux mdadm man Page  (0) 2011.09.21
[linux]ssh-keygen(scp사용시 암호없이 사용)  (0) 2011.08.29
Linux rsync 사용법  (0) 2011.08.29
Time Server Operation (NTP)  (0) 2010.12.27

리눅스에서 Crontab 같은 자동화 명령으로

다른 서버에 접근할 때 비밀번호 없이 접근하는 방법

기본적인 내용은 접근하는 클라이언트 서버에서 계정별로 Key값을 생성하여 접근하려는 대상서버와 클라이언트 서버간에 생성된 key값을 매치하여 비밀번호 없이 접근하는 방식

보안상 매우 취약 하므로 권장하지 않음

<사용법>

Step 1. 클라이언트 서버에서 접속 Key 생성하기

클라이언트 서버에 접속시 사용할 계정으로 접속하여 아래의 명령어를 실행

ssh-keygen -t rsa

다음과 같은 출력화면을 엔터로 넘어간다.

Generating public/private rsa key pair.
Enter file in which to save the key (/계정/.ssh/id_rsa) :

(엔터를 치면 된다)

다음엔

Enter passphrase (empty for no passphrase):

(또 엔터를 치면 된다)

마지막으로

Your identification has been saved in …
Your public key has been saved in …

둘다 엔터를 치면 파일 경로와 파일 명이 출력된다

보통 id_rsa.pub로 끝난다.

Step 2. .pub 파일을 접근 대상 서버에 계정폴더 밑에 복사해 온다.

key 파일을 접근대상 서버의 계정명 폴더(/home/계정명/.ssh/)경로에

authorized_keys파일로 이름을 변경하여 저장한다.

만약 기존에 파일이 있다면 방금 생성된 파일의 내용을 뒤에 추가 하면 된다.

위에 설정을 완료하면 비밀번호 없이 접속이 가능해진다.

'IT인생_스크랩 > Linux' 카테고리의 다른 글

centOS5, mdadm 을 이용한 raid5 구성  (0) 2011.09.21
Linux mdadm man Page  (0) 2011.09.21
[linux]ssh-keygen(scp사용시 암호없이 사용)  (0) 2011.08.29
Linux rsync 사용법  (0) 2011.08.29
Time Server Operation (NTP)  (0) 2010.12.27
우분투 Bonding  (0) 2010.12.16

# ubuntu rsync명령어 사용법


서버간 디렉토리별 sync가 필요할 때가 있으니...

그럴때 사용하는 rsync명령어

실 서비스 서버 1대와 stand by로 사용하는 서버의 데이터 디렉토리

또는 기존 디렉토리의 백업시 사용하면 편리하다


기본적으로 /etc/rsyncd.conf 파일을 생성하여 xinetd, chkconfig에 등록을하여 사용하지만

그렇게 했는데 지정 디렉토리를 못읽어 오는 불상사가 생겼다

빨리 진행해야 하는 일이어서 그냥 sync디렉토리를 적어주어 해결함

(분명 내가 무슨 설정을 잘 못 준듯 서버는 거짓말을 하진 않을테니....)


기본적인 사용법

# rsync [옵션][sourceIP/host]:[디렉토리] [target 디렉토리]

ex) rsync -avz --delete test01:/home/juner /home/backup

-- test01 서버의 juner홈 디렉토리를 backup 디렉토리에 싱크


옵션

-a : archice mode ( 심볼릭 링크, 속성, 퍼미션, 소유권 등 보곤)

-v : verbose mode (자세한 정보 출력)

-z : compress (전송시 압축)

-r : 하위 디렉토리 포함

-e ssh : ssh를 이용한 rsync 동기화

-- delete : 서버 동기화 후 rsync서버에서 파일이 삭제 되었으면 클라이언트도 대상 파일을 삭제


추가로 그냥 rsync를 사용시(rsyncd.conf를 사용하면 잘 모르겠음) 서버간 접속시에는 비밀번호를 물어봄

그걸 해결하기 위해서 keygen을 이용하여 키를 발급하여 서버의 접속 계정 디렉토리에 저장

(자세한 내용은 http://blog.naver.com/juner84/100118423643 참조)


마지막으로 crontab에 위의 내용을 등록해주면 됨


뭐 이런식~


<출처>

http://blog.bagesoft.com/767

http://sungyong.tistory.com/44

http://bban2.tistory.com/69

항상 감사합니다.

[출처] [Linux] rsync 사용법|작성자 juner84


'IT인생_스크랩 > Linux' 카테고리의 다른 글

Linux mdadm man Page  (0) 2011.09.21
[linux]ssh-keygen(scp사용시 암호없이 사용)  (0) 2011.08.29
Linux rsync 사용법  (0) 2011.08.29
Time Server Operation (NTP)  (0) 2010.12.27
우분투 Bonding  (0) 2010.12.16
젠투 (Gentoo) 리눅스 설치  (0) 2010.12.13
Time Server Operation
  이 문서는 안녕 리눅스를 이용하여 time server 를 운영하는 것을 목적으로 한다.

리눅스 서버에서 시간 동기화를 이용하는 방법으로는 rdate 와 ntp 방식이 있다. 이 두
방식에 대한 차이는 http://time.ewha.net 을 참조하고, 여기서는 ntp 방식을 이용하여
time server 를 운영하는 방법을 설명하도록 한다.

기본적으로, ntp 방식은 straum 이라는 계층구조를 가지는데, straum 0 은 GPS 나 세슘
원자 시계등 시간을 구하는 장비를 의미하며, straum 1 은 GPS 나 세슘 원자시계등에서
직접 시간을 동기화하는 서브들을 의미한다. straum 2 부터는 계속 트리 구조로 내려가
게 된다.

여기서 straum 을 설명하는 이유는, 무턱대고 무조건 straum 1 에 동기화를 한다면, 이
straum 1 서버들은 부하를 견디지 못할 것이고, 그렇다면 서비스를 포기하는 현상이 발
생할 수 있게된다. 또한, 이렇게 사용하는 것은 ntp 설계 의미를 무시하는 일이기도 하
다.

그래서, 보통 사용하는 환경은 straum 2 에서 동기화를 하고, 이 동기화를 받은 straum
3 서버에 나머지 같이 운영하는 서버들을 peer 로 해서 동기화를 시키면 된다.

ntp protocol 을 이용했을 경우, straum 1 ~ 15 까지의 편차가 micro seconds 이므로,
굳이 straum 1 이나 2 를 고집할 이유가 전혀 없다고 봐도 무방하다.

국내에서 운영중인 straum 2 서버는 다음과 같다.

* straum 2 list
ntp.ewha.net
ticktock.ewha.net
ntp1.epidc.co.kr
ntp2.epidc.co.kr
time.bora.net
time.korserve.net
t2.korserve.net
rokkorclub.net
time.wonkwang.ac.kr
noc6-3.koren21.net

최신 목록은 http://time.ewha.net/domestic.shtml 에서 확인을 하도록 한다.

그럼, 본격적으로 설정을 해 보도록 하며, 서버가 A,B,C 가 있다고 가정을 하고, (물론
더 많을 수도 더 적을 수도 있다.) A 서버를 서비스를 위한 time server 로 설정을 하
고 B 서버와 C 서버를 A 서버에서 sync 하도록 설정을 하는 것을 예로 한다. 이하 부터
는 A 를 서버, B 와 C 를 peer 라 호칭을 한다.

방화벽 설정에 대해서는 3 번 항목을 참고한다.

1. straum 3 서버 설정하기

straum 3 라고 명칭한 이유는 straum 2 에서 sync 를 하기 때문이다. straum 2 에서
sync 하는 이유는, straum 1 의 수가 워낙적고, 접속이 원할하지 않으며, 실제로 접
속을 제한하는 서버들이 많기 때문이다.

/etc/ntp.conf 를 다음과 같이 수정을 한다.


 Hanterm - cat /etc/ntp/ntp.conf
 [oops@main dir]$ cat /etc/ntp/ntp.conf

restrict default nomodify notrap noquery
restrict 127.0.0.1
restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap

# straum 2 server list
server ntp.ewha.net
server ntp1.epidc.co.kr
server time.bora.net
server time.wonkwang.ac.kr
server time.korserve.net
server noc6-3.koren21.net

driftfile /var/lib/ntp/drift
broadcastdelay 0.008

keys /etc/ntp/keys

[oops@main dir]$

  straum 2 서버 리스트는 위의 링크를 참조하여 설정을 하도록 한다.

/etc/ntp/ntp.conf 는 안녕 리눅스의 경우이다. 보통 따로 패치를 하지 않는다면 기본
값으로 /etc/ntp.conf 를 사용한다. driftfile 과 key 의 경우에도 배포본마다 위치가
다를 수 있으니 알아서 확인을 하도록 한다.

restric 설정은 peer 들이 본 서버로 sync 하는 것에 대한 제한을 한다.

restrict default nomodify notrap noquery

이 설정은 기본으로 모든 권한을 주지 않음을 의미한다.

restrict 127.0.0.1

127.0.0.1 즉, 서버 자신에서는 모든 권한을 가진다.

restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap

192.168.0.0 ~ 192.168.0.255 c class 에서는 질의를 할 수 있는 권한을 가진다.

즉, 위의 2 라인은 항상 기본으로 들어가는 설정이며, peer 를 거느릴 서버에서는 (즉
A 의 입장에서는) 하위 peer 들의 질의를 받을수 있도록 3 번째 라인과 같이 restrict
설정을 해 주어야 한다.

설정을 마쳤다면, service ntpd restart 명령으로 ntpd 를 시작 하고, ntpq 명령을 이
용하여 sync 를 잘 하고 있는지 확인을 한다.


 Hanterm - ntpq -p
 [oops@main dir]$ ntpq -p

remote refid st t when poll reach delay offset jitter
==============================================================================
*211.189.50.33 220.73.142.73 2 u 62 64 17 0.822 6.191 0.052
+ntp1.epidc.co.k 192.168.17.8 2 u 60 64 17 1.217 6.426 0.187
-zero.bora.net 192.12.19.20 2 u 60 64 17 2.427 2.205 0.226
-mrtg.wonkwang.a 203.254.163.74 2 u 56 64 17 9.292 42.379 0.106
+korserve.net 128.86.8.123 2 u 56 64 17 5.706 6.679 0.086
noc6-3.koren21. 192.36.144.22 2 u 58 64 0 1.540 3.777 0.051

[oops@main dir]$

    ntpd 를 막 재시작 하고 ntpq 를 실행한 경우, 5 분 정도를 기다려야 sync 가 진행이
된다는 것을 명심한다.

remote 는 sync 를 하는 straum 2 서버 주소이다.
refid 는 각 straum 2 서버가 현재 sync 를 하고 있는 straum 1 서버를 보여준다.
st 는 각 라인의 remote 들의 straum 을 나타낸다.
그 외의 항목들은 ntp 가 알아서 하는 것들이니 신경쓰지 말자.

가장 중요한 것은 remote 필드의 주소 앞에 붙어 있는 기호들이다. 각 기호의 의미
는 다음과 같다.

* 는 현재 sync 를 받고 있음을 의미한다.
+ ntp 알고리즘에 의해 접속은 가능하지만 sync 를 하고 있지는 않음을 의미
- ntp 알고리즘에 의해 접속은 가능하지만 sync 가능 리스트에서 제외
blank 는 접속이 불가능함을 의미한다.

이외에 .(dot) 또는 # 등의 기호가 나올 수 있지만, 그냥 여기서는 무시하도록 한다.
아 참고로, 위의 결과는 임의로 수정한 것이다.

마지막으로 st 가 16 이 나올 경우는, 해당 서버에 접속을 할 수 없음이다.


2. peer 설정

다음은, B 와 C 를 straum 3 로 설정한 A 로 부터 sync 를 받도록 설정을 한다. A 도
메인은 a.com 이라고 가정을 하자.


 Hanterm - cat /etc/ntp/ntp.conf
 [oops@main dir]$ cat /etc/ntp/ntp.conf

restrict default nomodify notrap noquery
restrict 127.0.0.1

# straum 2 server list
server a.com

driftfile /var/lib/ntp/drift
broadcastdelay 0.008

keys /etc/ntp/keys

[oops@main dir]$

    peer 설정에서는 server 를 straum 3 으로 지정한 서버 A 를 지정한다. 그 외에는 틀
린 것이 없다. 역시 service ntpd restart 로 재시작을 한 후에 위에서 처럼 ntpq 로
확인을 한다.


 Hanterm - ntpq -p
 [oops@main dir]$ ntpq -p

remote refid st t when poll reach delay offset jitter
==============================================================================
*a.com 211.189.50.33 2 u 62 64 17 0.822 6.191 0.052

[oops@main dir]$

    여기서 잠깐 의문.. 왜 ntpq 확인시에, A 서버에서 sync 하는 st 가 2 인데,  straum
3 에서 sync 하는 peer 들의 ntpq 에서도 여전히 2 일까?

이는 A 서버의 시간을 동기화 하는 것이 아니라 straum 3 서버가 straum 2 에서 sync
하는 시간을 forwarding 하는 것이기 때문에, straum 3 서버와 동일하게 2 로 표기가
되는 것이다. 그래서 굳이 A,B,C 가 각각 straum 2 에 sync 를 할 필요가 없는 것이
다. 또한, 그렇게 한다면 상위 straum 서버들은 상당히 버거울 것이고..


3. 방화벽 설정

ntp protocol 은 기본적으로 udp 123 번을 사용을 한다. 안녕 리눅스에서는 기본으로
oops-firewall 이 구동이 되므로, 다음의 설정들을 적용해 줘야 한다.

서버의 입장 (A 의 경우) 에서는 /etc/oops-firewall/filter.conf 에서

UDP_ALLOWPORT = 123

또는

UDP_HOSTPERPORT = 192.168.0.0/255.255.255.0:123

과 같은 설정이 필요하다. 전자는 123 번 포트를 anywhere 로 여는 것이고 후자는 접
속을 192.168.1.x 의 C class 에서의 접속만 허용하는 모습니다.

peer 의 입장 (B 나 C) 에서는 /etc/oops-firewall/filter.conf 의 가장 마지막 설정
인 OUT_UDP_ALLOWPORT 에 아래와 같이 123 번을 등록한다.

OUT_UDP_ALLOWPORT = 53 123 161

설정을 마친 후에, service oops-firewall restart 명령으로 방화벽 룰을 갱신하도록
한다.

[출처] [펌] NTP - Time Server|작성자 nam2582

우분투 Bonding


연구실의 새 서버(이름이 EDIS입니다 ^^;)에는 기가비트 이더넷 포트가 두 개나 있습니다.
지금까지는 하나의 포트만 사용했는데, 백업 데이터를 감당하는 용도로 사용하는 서버라서 대역폭이 매우 클 필요가 있겠더라고요.
그래서 예전부터 생각하고 있었던 네트워크 본딩을 시도해 보았습니다.

설치할 패키지는 ifenslave라는 것으로, 이것이 네트워크 본딩을 지원합니다.

# aptitude install ifenslave


이렇게 설치를 해 주고요, /etc/modprobe.d/arch/i386 파일에 다음 두 행을 추가합니다.

alias bond0 bonding
options bonding mode=0 miimon=100


mode가 의미하는 바는 다음과 같습니다.

mode=0 <- 제가 쓸 모드

This mode uses the Round-robin policy: Transmit packets in sequential order from the first available slave through the last. This mode provides load balancing and fault tolerance.

라운드-로빈 모드. 이 모드는 네트워크 부하 분산 및 내결함성 향상을 위해 쓰입니다.

mode=1

This mode uses an Active-backup policy: Only one slave in the bond is active. A different slave becomes active if, and only if, the active slave fails. The bond's MAC address is externally visible on only one port (network adapter) to avoid confusing the switch. This mode provides fault tolerance. The primary option affects the behavior of this mode.

액티브-백업 모드. 첫 번째 랜카드가 죽으면 두 번째 랜카드가 작동합니다. 두 번째가 죽으면 세 번째가 작동하고요. 그런 식입니다. 모드 0보다 매리트는 없어 보이네요.

mode=2

Transmit based on [(source MAC address XOR'd with destination MAC address) modulo slave count]. This selects the same slave for each destination MAC address. This mode provides load balancing and fault tolerance.

출발지 맥어드레스를 기반으로 부하 분산을 한다고 합니다. 즉, 부하 분산은 하지만 그것이 호스트 기반이라는 거죠. 랜카드 하나당 통신하는 호스트가 정해져 있습니다. 각각의 서버들에게 안정적인 대역폭을 제공하고자 할 때 쓸만해 보입니다.

물론 이런 경우에는 본딩을 한다기보다는 랜카드마다 할당된 IP주소를 모아서 하나로 관리한다는 성질이 더 강하지요.

mode=3

Broadcast policy: transmits everything on all slave interfaces. This mode provides fault tolerance.

각각의 본딩된 랜카드가 똑같은 패킷을 발송합니다. 랜카드가 절대로, 절대로 죽어서는 안 되는, 그리고 랜카드에서 생성된 패킷이 절대로, 절대로 없어져서는 안 되는 서버에 제격이죠.

mode=4

IEEE 802.3ad Dynamic link aggregation. Creates aggregation groups that share the same speed and duplex settings. Utilizes all slaves in the active aggregator according to the 802.3ad specification.

잘 이해는 안되지만, 그룹별로 관리하나 봅니다.

          *Pre-requisites:

1. Ethtool support in the base drivers for retrieving the speed and duplex of each slave.

2. A switch that supports IEEE 802.3ad Dynamic link aggregation. Most switches will require    some type of configuration to enable 802.3ad mode

mode=5

Adaptive transmit load balancing: channel bonding that does not require any special switch support. The outgoing traffic is distributed according to the current load (computed relative to the speed) on each slave. Incoming traffic is received by the current slave. If the receiving slave fails, another slave takes over the MAC address of the failed receiving slave.

글쎄요... 읽어봐도 무슨 내용인지...

*Prerequisite: Ethtool support in the base drivers for retrieving the speed of each slave.

mode=6

Adaptive load balancing: includes balance-transmit load balancing plus receive load balancing for IPV4 traffic, and does not require any special switch support. The receive load balancing is achieved by ARP negotiation. The bonding driver intercepts the ARP Replies sent by the local system on their way out and overwrites the source hardware address with the unique hardware address of one of the slaves in the bond such that different peers use different hardware addresses for the server.

이건 mode0과 비슷하지만, ARP변조를 통해 부하분산을 합니다. 원래 네트워크 본딩은 특별한 스위치 허브가 필요한데, 이건 그게 필요없다고 하네요.

저는 확인은 안했습니다만, 허브가 3com 이니까 웬만한 건 지원하리라 생각하고 mode0을 사용했습니다.


miimon은 해당 밀리초마다 체크한다는 의미입니다.

이걸 설정을 했으면, /etc/network/interfaces 파일을 편집합니다.
기존의 eth0, eth1 설정을 지우고요, 다음을 추가합니다.

auto bond0
iface bond0 inet static
        address 192.168.1.10
        netmask 255.255.255.0
        broadcast 192.168.1.255
        gateway 192.168.1.1
        dns-nameservers 165.246.10.2
        post-up ifenslave bond0 eth0 eth1

post-up 항목이 추가됐고, iface가 bond0으로 바뀐 것에 주목하세요.

여기까지 하셨으면, 서버를 리부팅합니다.

# reboot

자, 리부팅이 정상적으로 되셨나요? 그러면 ifconfig 를 실행해 보기로 하죠.

# ifconfig
bond0     Link encap:Ethernet  HWaddr 00:15:17:4E:F7:20
          inet addr:192.168.1.10  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::215:17ff:fe4e:f720/64 Scope:Link
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:4019 errors:0 dropped:0 overruns:0 frame:0
          TX packets:290 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:388264 (379.1 KB)  TX bytes:39824 (38.8 KB)

eth0      Link encap:Ethernet  HWaddr 00:15:17:4E:F7:20
          inet6 addr: fe80::215:17ff:fe4e:f720/64 Scope:Link
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:2013 errors:0 dropped:0 overruns:0 frame:0
          TX packets:150 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:193628 (189.0 KB)  TX bytes:19430 (18.9 KB)
          Base address:0x2020 Memory:b8820000-b8840000

eth1      Link encap:Ethernet  HWaddr 00:15:17:4E:F7:20
          inet6 addr: fe80::215:17ff:fe4e:f720/64 Scope:Link
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:2006 errors:0 dropped:0 overruns:0 frame:0
          TX packets:140 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:194636 (190.0 KB)  TX bytes:20394 (19.9 KB)
          Base address:0x2000 Memory:b8800000-b8820000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:167 errors:0 dropped:0 overruns:0 frame:0
          TX packets:167 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:48261 (47.1 KB)  TX bytes:48261 (47.1 KB)

이렇게 보이면, 본딩이 제대로 이루어진 겁니다.
두 장의 랜카드가 기가비트였으니까, 이제 이 서버의 네트워크 속도는 무려 2기가비트!!
이제 백업 서버가 동시에 여럿이 작동해도 예전보다 두 배의 속도로 응답할 수 있게 되었습니다.

출처: http://wbstory.codns.com/~wbstory/blog/ ··· 594%25a9 (새 창으로 열기)

'IT인생_스크랩 > Linux' 카테고리의 다른 글

Linux rsync 사용법  (0) 2011.08.29
Time Server Operation (NTP)  (0) 2010.12.27
우분투 Bonding  (0) 2010.12.16
젠투 (Gentoo) 리눅스 설치  (0) 2010.12.13
트래픽 패킷 생성도구 Mausezahn 소개합니다.  (0) 2010.06.24
TCPDUMP 사용법  (0) 2010.06.24
젠투(Gentoo) 리눅스는 직접 소스 컴파일 하여 하드웨어에 가장 알맞게 최적화를 시키기에 좋은 배포판입니다.
(그만큼 삽질을 많이 한다는.. 사실.. 컴파일 시간에 질리는 거죠..)
이 글은 젠투(Gentoo) 리눅스의 Stage3 설치 방식으로 진행합니다.

국내 미러 사이트에서 Gentoo Livecd를 다운로드하고 시디 버닝을 합니다.
ftp://ftp.daum.net/gentoo/releases/x86/current-iso/

- 원격 설치 설정
Gentoo Livecd 로 부팅이 된 화면입니다.


원격 설치를 위해 네트워크 설정을 합니다.
livecd ~ # net-setup eth0
인터페이스 정보 화면이며 Yes를 눌러 넘어갑니다.


네트워크 설정 화면에서 자신의 환경이 무선, 유선임에 따라 적절히 선택하고 넘어갑니다.


유선 네트워크로 설정시 TCP/IP 설정 화면이 나옵니다. 2번을 눌러 고정 아이피로 설정 해줍니다.


고정 아이피를 적어줍니다.


브로드 케스트 주소를 적어줍니다.

 

넷마스크를 적어줍니다.


기본 게이트웨이를 적어줍니다.


DNS 서버 아이피를 적어줍니다.


DNS 쿼리시 찾을 도메인을 적어줍니다.



원격으로 설치하기 위해 ssh 데몬을 시작합니다.
livecd ~ # /etc/init.d/sshd start

원격 접속에 필요한 루트 비밀번호를 설정 해줍니다.
livecd ~ # passwd root
New password:
Retype new password:
passwd: password updated successfully

PuTTY, SecureCRT 와 같은 프로그램으로 젠투 서버에 원격으로 로그인 합니다.

 

- 파티션  설정
현재의 디스크를 살펴봅니다. 200기가 정도 있군요..
livecd ~ # fdisk -l

Disk /dev/sda: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

Disk /dev/sda doesn't contain a valid partition table

루트 파티션과 스왑 파티션을 적절히 나눠 줍니다.
livecd ~ # fdisk /dev/sda

The number of cylinders for this disk is set to 26108.
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): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-26108, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-26108, default 26108): 25084

스왑 파티션을 만들어 줍니다.
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (25085-26108, default 25085):
Using default value 25085
Last cylinder, +cylinders or +size{K,M,G} (25085-26108, default 26108):
Using default value 26108

Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 82
Changed system type of partition 2 to 82 (Linux swap / Solaris)
스왑 파티션은 82번 입니다.

 

만든 파티션을 확인 합니다.
Command (m for help): p

Disk /dev/sda: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x20a0619f

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1       25084   201487198+  83  Linux
/dev/sda2           25085       26108     8225280   82  Linux swap / Solaris

위에 설정들을 저장하고 빠져 나옵니다.
Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

생성된 루트 파티션(/dev/sda1)을 ext3 파일 시스템으로 포멧합니다.
livecd ~ # mkfs -t ext3 /dev/sda1
mke2fs 1.41.3 (12-Oct-2008)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
12599296 inodes, 50371799 blocks
2518589 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
1538 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 37 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

스왑 파티션(/dev/sda2)을 사용할수 있도록 생성 해줍니다.
livecd ~ # mkswap /dev/sda2
Setting up swapspace version 1, size = 8225276 KiB
no label, UUID=454fa1b3-76aa-40da-9e15-01bf0b7181df

스왑을 활성화 합니다.
livecd ~ # swapon /dev/sda2
livecd ~ # cat /proc/swaps
Filename                                Type            Size    Used    Priority
/dev/sda2                               partition       8225272 0       -1

- Stage3 설치
/mnt/gentoo 를 마운트 합니다.
livecd ~ # mount /dev/sda1 /mnt/gentoo
livecd ~ # mkdir /mnt/gentoo/boot
livecd ~ # mount /dev/sda1 /mnt/gentoo/boot
livecd ~ # cd /mnt/gentoo

국내 미러 사이트에서 Stage3 을 다운로드 합니다.
livecd gentoo # wget \
ftp://ftp.daum.net/gentoo/releases/x86/current-stage3/stage3-i686-20091229.tar.bz2

Stage3 을 압축을 풀어줍니다.
livecd gentoo # tar xjvf stage3-i686-20091229.tar.bz2

proc를 사용할수 있도록 마운트 해줍니다.
livecd gentoo # mount -t proc proc /mnt/gentoo/proc
livecd gentoo # mount | grep /mnt/gentoo/proc
proc on /mnt/gentoo/proc type proc (rw)

- 미러 설정
Gentoo 리눅스는 미러서버를 통하여 패키지들을 받아오기 때문에 적당한 미러 서버를 선택 합니다.
livecd ~ # mirrorselect -i -o >> /mnt/gentoo/etc/make.conf

 

- chroot 진입
설치될 파티션을 "/" 최상위 디렉토리로 변경하여 설치를 하도록 설정 해줍니다.
livecd ~ # cp /etc/resolv.conf /mnt/gentoo/etc/resolv.conf
livecd ~ # chroot /mnt/gentoo /bin/bash
livecd / # env-update
>>> Regenerating /etc/ld.so.cache...
livecd / # source /etc/profile

- Portage 받기
Portage 스냅샷을 다운로드 받습니다.
livecd / # cd /usr
livecd usr # wget ftp://ftp.daum.net/gentoo/snapshots/portage-latest.tar.bz2
livecd usr # tar xjvf portage-latest.tar.bz2

- 최적화 설치 작업
사용자의 취향에 맞는 최적화 기능을 위해서 /etc/make.conf 파일을 아래와 같이 nano 에디터로 수정합니다.
(필요없는 분들은 안하셔도..)
livecd / # nano /etc/make.conf
CFLAGS="-O2 -march=i686 -pipe"
CXXFLAGS="-O2 -march=i686 -pipe"
CHOST="i686-pc-linux-gnu"
LINGUAS="en ko"
PORTDIR_OVERLAY="/usr/portage"

GENTOO_MIRRORS="ftp://ftp.daum.net/gentoo/ "

- 지역별 시간대 설정
기본 시간대는 GMT 기준으로 되어있으므로 아래와 같이 설정 해줍니다.
livecd / # echo 'ko_KR UTF-8' >> /etc/locale.gen
livecd / # echo 'ko_KR.UTF-8 UTF-8' >> /etc/locale.gen
livecd / # echo 'ko_KR.EUC-KR EUC-KR' >> /etc/locale.gen
livecd / # locale-gen
livecd / # cp /usr/share/zoneinfo/Asia/Seoul /etc/localtime
livecd / # nano /etc/conf.d/clock
CLOCK="UTC"
TIMEZONE="Asia/Seoul"

- fstab 설정
livecd / # nano /etc/fstab
# <fs>                  <mountpoint>    <type>          <opts>                    <dump/pass>
/dev/sda1                     /                  ext3             noatime                          0 1
/dev/sda2                    none             swap             sw                               0 0
shm                           /dev/shm        tmpfs            nodev,nosuid,noexec       0 0

 

- 커널(Kernel) 설치
커널 설치는 genkernel 을 사용하여 컴파일 하는 방법과 소스를 다운받아 설치하는 방법이 있습니다.
처음 설치하시는 분들은 genkernel 을 사용하는 것이 더 맘편합니다.

- genkernel을 이용한 커널 설치
livecd / # emerge gentoo-sources
livecd / # emerge genkernel
livecd / # genkernel --menuconfig all

- 필요한 패키지 설치
필요한 패키지들을 설치 해줍니다.

- System 로그 데몬
livecd / # emerge syslog-ng
livecd / # rc-update add syslog-ng  default

- cron 데몬 설치
livecd / # emerge vixie-cron
livecd / # rc-update add vixie-cron default

- reiserfsprogs 설치
livecd / #emerge reiserfsprogs

- Hotplug 설치
livecd / # emerge hotplug
livecd / # rc-update add hotplug default

- vim 에디터
livecd / # emerge vim

- cvs
livecd / # emerge cvs

- dhcpd
livecd / # emerge dhcpcd

부팅시 SSH 데몬이 자동 실행되도록 등록해줍니다.
livecd / # rc-update add sshd  default

- 루트 비밀번호 설정
처음에 livecd 에서 설정한 루트 비밀번호와 다르므로 꼭 설정 해주셔야 합니다.
livecd / # passwd
New password:
Retype new password:
passwd: password updated successfully

- 호스트네임 설정
livecd / # echo 'HOSTNAME="ruo91"' > /etc/conf.d/hostname

- 네트워크 설정
livecd / # echo 'dns_servers_eth0="168.126.63.1 168.126.63.2"' >> /etc/conf.d/net
livecd / # echo 'routes_eth0="default via 192.168.0.1"' >> /etc/conf.d/net
livecd / # echo 'config_eth0="192.168.0.100 netmask 255.255.255.0"' >> /etc/conf.d/net
livecd / # cat /etc/conf.d/net
# This blank configuration will automatically use DHCP for any net.*
# scripts in /etc/init.d.  To create a more complete configuration,
# please review /etc/conf.d/net.example and save your configuration
# in /etc/conf.d/net (this file :]!).
dns_servers_eth0="168.126.63.1 168.126.63.2"
routes_eth0="default via 192.168.0.1"
config_eth0="192.168.0.100 netmask 255.255.255.0"

- 부트로더 설치

grub 설치
livecd / # emerge grub
livecd / # grub
grub> root (hd0,0)
grub> setup (hd0)
grub> quit

 

genkernel 로 커널 컴파일시 아래 예제 처럼 설정 해줍니다.
livecd / # vim /boot/grub/grub.conf
default 0
timeout 3
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
title Gentoo Linux 2.6.31-gentoo-r6
root (hd0,0)
kernel /kernel-genkernel-x86-2.6.31-gentoo-r6 root=/dev/sda1
initrd /initramfs-genkernel-x86-2.6.31-gentoo-r6

- 설치 마무리
모든 설정을 적용하고 마운트한 것들을 umount 과 재부팅을 해줍니다.
livecd / # etc-update
livecd / # exit
livecd / # cd /
livecd / # umount /mnt/gentoo/boot
livecd / # umount /mnt/gentoo/proc
livecd / # umount /mnt/gentoo
livecd / # reboot

참고
http://wiki.kldp.org/wiki.php/GentooInstall
http://www.gentoo.org/doc/en/gentoo-x86-quickinstall.xml

도움 주신분
Google, HanIRC #Gentoo 채널의 badung 님 (fstab 에서 막힌 문제를 한번에 해결 해주셨음..)

'IT인생_스크랩 > Linux' 카테고리의 다른 글

Time Server Operation (NTP)  (0) 2010.12.27
우분투 Bonding  (0) 2010.12.16
젠투 (Gentoo) 리눅스 설치  (0) 2010.12.13
트래픽 패킷 생성도구 Mausezahn 소개합니다.  (0) 2010.06.24
TCPDUMP 사용법  (0) 2010.06.24
리눅스 시스템 Bonding  (0) 2010.06.23
출처 : http://packetinside.com/73



장비의 성능을 테스트 해 보거나, 방화벽이 제대로 패킷을 차단하는지, 프로토콜이 올바른지 등을
확인해 보고자 할때 의도적으로 패킷을 생성할 필요가 있다. 또는 조작된 패킷으로.
다양한 도구들이 많이 나와있는데, 앞으로 차차 소개하기로 하고 오늘은 리눅스기반의 패킷생성도구인
Mausezahn 을 소개한다.

패 킷을 의도적으로 생성하여 이용할 수 있는 곳은 서두에서 잠깐 언급한 것과 같이
사용처가 아주 다양하다. 악의적으로 조작되어 공격에 이용될 수도 있는 문제점도 있지만,
패킷인사이드를 방문하시는 분들은 업무의 활용, 스터디 목적이므로.

이미지출처 : www.perihel.at





공 식 사이트는 다음과 같으며, 명령어는 mz 로 불린다.


자, 우선 소스파일을 다운받고 컴파일을 한다. 단, 컴파일 전에 다음의 요구조건이 충족되는지 확인하자.

[필 요한것]
* cmake
* libpcap0.8-dev  (version >= 0.8 will definitely work)
* libnet1-dev     (version >= 1.1 will definitely work)
* libcli-dev      (version >= 1.9.1 will work)

데비안 사용자라면 apt-get install cmake 와 같이 간단히 패키지를 설치할 수 있다. 각 운영체제에 맞는
방법으로 설치하자.

다 운로드 받은 소스파일을 적절한 위치에 풀고 진행한다. (참고로, 소스파일을 풀면 해당 위치가
루트 이므로 디렉토리를 하나 만들고 그 안에 풀어주는 것이 좋을것이다)

1. cmake 를 실행해 주자.

$ cmake .
-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/kwanjin/workout/mz

2. 컴파일을 하기 위해 make 를 실행한다.

1.$ make
.
.
[ 98%] Building C object src/CMakeFiles/mz.dir/cli_igmp.o
[100%] Building C object src/CMakeFiles/mz.dir/cli_lldp.o
Linking C executable mz
[100%] Built target mz

3. 컴파일한 mz 를 설치하려면 'make install' 을 한다.

사용방법은 mz -h 를 해보면 볼 수 있고, 많은 내용이 있으므로 직접 한번 살펴보기를 바란다.
간단한 예를 들어보면 아래와 같다.

# ./mz eth4 -c 1000 "ff:ff:ff:ff:ff:ff ff:ff:ff:ff:ff:ff cc:dd 00:00:00:ca:fe:ba:be"

mz 다음에는 이더넷 인퍼페이스를 지정하고 -c 옵션은 카운트를 뜻한다. 그리고 임의의 연속적인 바이트를
지정하였다. tcpdump 로 해당 인터페이스를 덤프하면 다음과 같은 패킷을 볼 수 있다.

23:47:12.169827 Broadcast > Broadcast, ethertype Unknown (0xccdd), length 21:
        0x0000:  0000 00ca feba be                        .......
23:47:12.169831 Broadcast > Broadcast, ethertype Unknown (0xccdd), length 21:
        0x0000:  0000 00ca feba be                        .......
23:47:12.169834 Broadcast > Broadcast, ethertype Unknown (0xccdd), length 21:
        0x0000:  0000 00ca feba be                        .......
23:47:12.169838 Broadcast > Broadcast, ethertype Unknown (0xccdd), length 21:
        0x0000:  0000 00ca feba be                        .......
23:47:12.169841 Broadcast > Broadcast, ethertype Unknown (0xccdd), length 21:
        0x0000:  0000 00ca feba be                        .......

TCP Flooding 형태의 트래픽도 전송할 수 있다. -c 다음에 0 이 오면 루프를 도는 것이다. 즉, 사용자가
멈 출때까지 계속 동작하므로 주의한다. -A 는 출발지 IP 를 랜덤으로 설정하고 -t 는 프로토콜 타입으로
tcp 를 선택하고 -B 는 목적지 IP 를 정의한 것으로 예제에서는 C 클래스 대역으로 설정하였다. 그 이후
flags 에는 SYN 타입을 정의했고 목적지 포트로 5555 번을 설정했다.

# ./mz eth4 -c 0 -A rand  -t tcp -B 10.29.2.0/24  "flags=syn, dp=5555"
Mausezahn will send frames infinitly...

다음은 프로토콜 타입만 ARP 로 보낸 것이다.
# ./mz eth4 -c 0 -A rand  -t arp -B 10.29.2.0/24

한 쪽에서는 전송하고 다른 한쪽에서 트래픽을 덤프하면 생성되는 것을 볼 수 있을 것이다.

한 가지 이 프로그램이 독특한 부분이 있는데, 위에서 라이브러리 사용된 것을 보고 감을 잡으신 분들도
있을 것이다. libcli 는 시스코스타일의 대화형 화면을 제공해 준다. 시스코 라우터나 스위치를
접해 보신분들은 아마 익숙할 것이다.

-x 후에 사용할 포트를 지정하고 실행하면 지정된 포트로 리스닝을 하며 동작한다.

# ./mz eth4 -x 1234

자 그리고 해당 포트 번호로 접속을 해본다. 지정된 인터페이스에 할당된 IP 로 접속을 시도해 보자.

# telnet 192.168.0.6 1234
Trying 192.168.0.6...
Connected to 192.168.0.6.
Escape character is '^]'.

------------------------------------------
Mausezahn, version 0.39
Copyright (C) 2007-2009 by Herbert Haas.
------------------------------------------

Mausezahn comes with ABSOLUTELY NO WARRANTY; for details
type 'warranty'.  This is free software, and you are welcome
to redistribute it under certain conditions; see COPYING
(included in the Mausezahn source package) for details.

For Mausezahn NEWS visit http://www.perihel.at/sec/mz/

위 와 같은 화면이 뜨고 사용자 이름과 패스워드로 mz 를 넣어본다.

Username: mz
Password:

그리고 enable 을 넣고 'mops' 라는 패스워드를 입력하면 준비된 것이다.

mz-0.39> enable
Password:
mz-0.39#

시 스코 스타일의 형태로 나오므로 어렵지 않게 사용이 가능하다. 도움이 필요하면 ? 를 눌러보자.
아래 그림은 패킷을 만드는 예로 TCP-Flooding 이라는 것을 만들고 목적지 IP 는 192.168.1.1 로 설정하며
목 적지 주소는 랜덤하게 한다. 1000번을 수행하며 타입은 TCP 이다. 플래그는 syn 으로 셋팅하고
end 로 종료하였다.

자 다음 sh packet 으로 보면 앞에서 만들었던 내용이 있다. 실행하길 원하면 start 와 함께 ID 를 지정하면
된 다. 패킷의 자세한 내용을 보기 위해 sh packet 2 해서 세부 정보를 보는 화면도 보인다.

다 른 패킷 생성기와는 달리 이런 대화형 형태를 제공해 주어, 지속적으로 저장해 놓고 임의의 값을 변경하여
수행하고 자 하는 경우에는 유용하게 사용할 수 있을 것이다. 예를 들면, 모의해킹등.
물론, 편안한 방법은 각자 다르겠지만, 일단 이러한 것도 있다는 것을 알아두면 좋을 것이다.

Mausezahn은 C 로 제작된 만큼 빠른 속도를 제공하고 자유롭게 사용할 수 있다. 다만, 아직 윈도우 기반은
지원하지 않고 리눅스(기타 유닉스 플랫폼) 에서만 가능하다.

'IT인생_스크랩 > Linux' 카테고리의 다른 글

우분투 Bonding  (0) 2010.12.16
젠투 (Gentoo) 리눅스 설치  (0) 2010.12.13
트래픽 패킷 생성도구 Mausezahn 소개합니다.  (0) 2010.06.24
TCPDUMP 사용법  (0) 2010.06.24
리눅스 시스템 Bonding  (0) 2010.06.23
NTP 시간서버 설정  (0) 2010.06.23
출처 Knowledge base bins | KnBins
원문 http://blog.naver.com/binitime/80011283280

http://security.kaist.ac.kr/docs/tcpdump.html

 

 

 

TCPDUMP User Guide
 
 

Date : January 1999

written by Kwon, YongChul

-. 이 문서의 저작권은 저자(권용철:godslord@sparcs.kaist.ac.kr)에게 있습니다. 본문의 무단 인용, 복사는 저자와의 협의 없이 절대 불가능합니다.


Table of Contents


  • 이 문서를 보기 전에 알아야 할 사전 지식

    이 문서는 네트워크의 패킷들을 잡아내는 Tcpdump라는 프로그램에 대해서 설명하고 있다. 프로그램의 특성상, 네트워크에 관련된 많은 용어들과 특히 TCP/IP에 대한 내용 이 많이 나온다. 따라서 보다 잘 이해하기 위해서는 네트워크 설비 자료나, 네트워크 프로그래밍 가이드, 혹은 네트워크 프로토콜(TCP/IP)에 관련된 책들을 참조하는 것이 좋을 것이다.


  • Tcpdump란?

    Tcpdump는 주어진 조건식을 만족하는 네트워크 인터페이스를 거치는 패킷들의 헤더들 을 출력해 주는 프로그램이다. 프로그램의 특성상, 네트워크 인터페이스를 아주 심도 있게 사용하기 때문에, 실행하는 사람은 반드시 네트워크 인터페이스에 대한 읽기 권 한이 있어야만 한다.
    OS dependent)
    위에서 말하는 읽기 권한을 가지고 있어야 하는 파일, 혹은 Tcpdump의 퍼미션 이다.

    • SunOS : /dev/nit, /dev/bpf*
    • Solaris(SunOS 5.x) : /dev/le 등
    • HP-UX & IRIX & Linux : root에서 실행하거나, root로 setuid를 설정해야 함
    • Ultrix & Digital UNIX : root가 pfconfig를 이용하여, promiscuous-mode를 가능하게 설정하면 어떤 유저라도 사용할 수 있다.
    • BSD : /dev/bpf*


  • Tcpdump의 패키지 구하기

    Tcpdump는 ftp://ftp.ee.lbl.gov/tcpdump.tar.Z에 서 최신 버전을 구할 수 있다. 유명 한 프로그램이기 때문에, 시스템소프트웨어를 패키지형태로 제공해 주는 OS들의 경우 Vendor에서 패키징된(컴파일된) 버전으로도 구할 수 있을 것이다.


  • Tcpdump의 설치

    Tcpdump는 libpcap(Protocol Capture Library)라는 것을 사용한다. 이 라이브러리는 Platform에 상관없이 동일한 방법으로 사용자 레벨에서 패킷들을 캡춰할 수 있게 해 준다. 따라서 이 라이브러리가 없다면, ftp://ftp.ee.lbl.gov/libpcap.tar.Z에 서 구하 여 설치하도록 한다.

    ANSI C 컴파일러는 아마 대부분의 시스템에서 구비하고 있을 것이다. 만약 없다면 ftp://prep.ai.mit.edu/pub/gnu/gcc.tar.gz를 받아서 설치하기 바란다.

    libpcap라이브러리가 완벽하게 설치되었다는 가정하에서 다음의 절차에 따라 설치를 시작한다.

    • Makefile.in의 BINDEST와 MANDEST 항목에 각각, tcpdump 실행파일과 메뉴얼 페이 지가 설치될 디렉토리들을 입력해 준다.
    • Tcpdump 패키지와 함께 제공되는 ./configure 스크립트를 실행시킨다. 이 스크립트는 현재 시스템의 환경들을 검사하고 이에 맞추어서 Makefile을 생성해 준다.
    • make를 실행한다.
    • 컴파일이 다 됐으면, make install을 수행하여 실행파일을 설치하고, make install-man을 실행하여 메뉴얼 페이지도 설치한다.
    • tcpdump의 퍼미션이 제대로 되었는지를 검사한다. setgid가 설정되어 있기 때문에, 원하지 않는 사람이 실행하게 된다면 위험하다.
    위에서 설명한 절차를 그대로 옮겨 본다.
    # vi Makefile.in
    # ./configure
    # make
    # make install
    # make install-man
    OS dependent)
    • DEC/OSF and BSD/386, etc : tcpdump가 OS와 함께 제공되는 경우가 있다. 이럴 경우 tcpdump를 업그레이드 하기 전에 반드시 기존의 tcpdump를 백업해 두도록 하자.
    • Linux : libpcap 라이브러리는 2.0.25 커널에서 테스트 됐다. 2.0.x 대 커널 에서 25이하의 버전에서는 실행이 아마 가능할 것이다. 그러나 1.x대의 커널에서는 동작 여부가 입증되지 않았으므로 주의해야 한다.
    • OSF 4 : OSF4에서는 stack C 컴파일러에 치명적인 버그가 있다. 이 버그를 피해가려면, ./configure를 실행한 후 컴파일 하기 전에 Makefile에서 다음의 문장을 삭제한 후 컴파일해 주면 된다.
                -DETHER_HEADER_HAS_EA=1 -DETHER_ARP_HAS_EA=1


  • Tcpdump Source의 간략한 설명


  • Tcpdump의 옵션들

    • -a : Network & Broadcast 주소들을 이름들로 바꾼다.
    • -c Number : 제시된 수의 패킷을 받은 후 종료한다.
    • -d : comile된 packet-matching code를 사람이 읽을 수 있도록 바꾸어 표준 출력으로 출력하고, 종료한다.
    • -dd : packet-matching code를 C program의 일부로 출력한다.
    • -ddd : packet-matching code를 숫자로 출력한다.
    • -e : 출력되는 각각의 행에 대해서 link-level 헤더를 출력한다.
    • -f : 외부의 internet address를 가급적 심볼로 출력한다(Sun의 yp server와의 사용은 가급적 피하자).
    • -F file : filter 표현의 입력으로 파일을 받아들인다. 커맨드라인에 주어진 추가의 표현들은 모두 무시된다.
    • -i device : 어느 인터페이스를 경유하는 패킷들을 잡을지 지정한다. 지저되지 않으면 시스템의 인터페이스 리스트를 뒤져서 가장 낮은 번호를 가진 인터페이스를 선택한다(이 때 loopback은 제외된다).
    • -l : 표준 출력으로 나가는 데이터들을 line buffering한다. 다른 프로그램에서 tcpdump로부터 데이터를 받고자 할 때, 유용하다.
    • -n : 모든 주소들을 번역하지 않는다(port,host address 등등)
    • -N : 호스트 이름을 출력할 때, 도메인을 찍지 않는다.
    • -O : packet-matching code optimizer를 실행하지 않는다. 이 옵션은 optimizer에 있는 버그를 찾을 때나 쓰인다.
    • -p : 인터페이스를 promiscuous mode로 두지 않는다.
    • -q : 프로토콜에 대한 정보를 덜 출력한다. 따라서 출력되는 라인이 좀 더 짧아진다.
    • -r file : 패킷들을 '-w'옵션으로 만들어진 파일로 부터 읽어 들인다. 파일에 "-" 가 사용되면 표준 입력을 통해서 받아들인다.
    • -s length: 패킷들로부터 추출하는 샘플을 default값인 68Byte외의 값으로 설정할 때 사용한다(SunOS의 NIT에서는 최소가 96Byte이다). 68Byte는 IP,ICMP, TCP, UDP등에 적절한 값이지만 Name Server나 NFS 패킷들의 경우에는 프로토콜의 정보들을 Truncation할 우려가 있다. 이 옵션을 수정할 때는 신중해야만 한다. 이유는 샘플 사이즈를 크게 잡으면 곧 패킷 하나하나를 처리하는데 시간이 더 걸릴 뿐만아니라 패킷 버퍼의 사이즈도 자연히 작아지게 되어 손실되는 패킷들이 발생할 수 있기 때문이다. 또, 작게 잡으면 그만큼의 정보를 잃게되는 것이다. 따라서 가급적 캡춰하고자 하는 프로토콜의 헤더 사이즈에 가깝게 잡아주어야 한다.
    • -T type : 조건식에 의해 선택된 패킷들을 명시된 형식으로 표시한다. type에는 다음과 같은 것들이 올 수 있다. rpc(Remote Procedure Call), rtp(Real-Time Applications protocol), rtcp(Real-Time Application control protocal), vat(Visual Audio Tool), wb(distributed White Board)
    • -S : TCP sequence번호를 상대적인 번호가 아닌 절대적인 번호로 출력한다.
    • -t : 출력되는 각각의 라인에 시간을 출력하지 않는다.
    • -tt : 출력되는 각각의 라인에 형식이 없는 시간들을 출력한다.
    • -v : 좀 더 많은 정보들을 출력한다.
    • -vv : '-v'보다 좀 더 많은 정보들을 출력한다.
    • -w : 캡춰한 패킷들을 분석해서 출력하는 대신에 그대로 파일에 저장한다.
    • -x : 각각의 패킷을 헥사코드로 출력한다.

    조 건식(expression)

    옵션의 제일 마지막인 조건식은 어떤 패킷들을 출력할지를 선택하는데 쓰인다. 조건식이 주어지지 않는 다면 모든 패킷들이 그 대상이 될 것이다. 일단 주어지면, 아무리 패킷들이 많아도 조 건식에 부합하는 패킷만을 출력한다.

    조건식들은 하나 또는 몇 개의 primitive들로 구성되어 있다. primitive들은 보통 하나 혹은 몇개의 qualifier들 다음에 오는 하나의 값으로 이루어진다. Qualifier들은 모두 3 종류이며 다음과 같다.

    • type : 주어진 값의 종류가 무엇인지를 나타낸다. 가능한 type들은 'host', 'net', 'port'가 있다. type이 없는 값들은 type을 host라 가정한다.
    • dir : id로 부터의 어떤 특정한 전송 방향을 나타낸다. 가능한 방향은 'src', 'dst', 'src or dst', 'src and dst'이다. 만약 방향이 정해지지 않았다면, src or dst라 가정한다. "For `null' link layers (i.e. point to point protocols such as slip) the inb ound and out bound qualifiers can be used to specify a desired direction."
    • proto : 매칭을 특정 프로토콜에 한해서 수행한다. 가능한 프로토콜들은 ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp, udp이다. 만약 프로토콜이 명시되지 않았다면, 해당하는 값의 type에 관련된 모든 프로토콜들이 그 대상이 된다.

    이 밖에도 위의 패턴을 따르지 않는 Primitive들이 존재한다(gateway, broadcst, less, greater, 산술식).

    좀 더 정교한 조건식들을 사용하려면, 'and(&&)', 'or(||)', 'not(!)'들을 사용하여 여러 primitive들을 연결하면 된다. 같은 표현들은 생략될 수 있다.

    사용 가능한 Primitive들

    • dst host HOST
      packet의 IP destination 항목이 HOST일때 참이 된다.
    • src host HOST
      packet의 IP source 항목이 HOST일때 참이 된다.
    • host HOST
      IP source, IP destination 항목 중 어느 하나라도 HOST이면 참이다.
    • ether dst ehost
      ethernet destination 주소가 ehost일 때 참이다.
    • ether src ehost
      ethernet source 주소가 ehost일 때 참이다.
    • ether host ehost
      ethernet source, destination 항목들 중 어느 하나라도 ehost이면 참이다.
    • gateway host
      패킷이 host를 게이트웨이로 사용하면 참이다. 이 말의 의미는 ethernet sour ce나 destination 항목은 host이지만, IP source와 destination은 host가 아닐 때를 말한다.
    • dst net NET
      패킷의 IP destination 주소가 NET의 network number를 가지고 있을 때 참이 다.
    • src net NET
      패킷의 IP source 주소가 NET의 network number를 가지고 있을 때 참이다.
    • net NET
      패킷의 IP source 주소 혹은 destination 주소가 NET의 network number를 가 지고 있을 때 참이다.
    • net netmask mask
      IP 어드레스가 지정된 netmask를 통해서 net과 매칭되면 참이다.
    • net net/len
      IP 어드레스가 netmask와 len 비트만큼 매치되면 참이다.
    • dst port PORT
      패킷이 ip/tcp, ip/udp 프로토콜의 패킷이고 destination port의 값이 PORT일 때 참이다. port는 /etc/services에 명시된 이름일 수도 있고 그냥 숫자일 수도 있다. 만약 이름이 사용됐다면 port 번호와 프로토콜이 같이 체크될 것이다. 만약 숫자나 불 확실한 이름이 사용됐을 경우에는 port 번호만이 체크될 것이다.
    • src port PORT
      패킷의 source port의 값으로 PORT를 가지면 참이다.
    • port PORT
      패킷의 source, destination port 중에 하나라도 PORT이면 참이다.
    • less length
      패킷이 length보다 짧거나 같으면 참이다.(len <= length)
    • greater length
      패킷이 length보다 짧거나 같으면 참이다.(len >= length)
    • ip proto protocol
      패킷이 지정된 종류의 프로토콜의 ip패킷이면 참이다. Protocol은 icmp, igrp, udp, nd, tcp 중의 하나 혹은 몇 개가 될 수 있다. 주의할 점은 tcp, udp, icmp들은 '\'로 escape되어야 한다.
    • ehter broadcast
      패킷이 ethernet broadcast 패킷이라면 참이다. ehter는 생략 가능하다.
    • ip broadcast
      패킷이 IP broadcast 패킷이라면 참이다.
    • ether multicast
      패킷이 IP multicast 패킷이라면 참이다.
    • ether proto protocol
      패킷 이 ether type의 protocol이라면 참이다. protocol은 ip, arp, rarp 중에 하나 혹은 몇개가 될 수 있다. ip proto protocol에서와 마찬가지로 ip, arp, rarp는 escape 되어야 한다.
    • decnet src host
      만약 DECNET의 source address가 host이면 참이다. 이 어드레스는 '10.123'이 나 DECNET의 host name일 수 있다. DECNET host name은 DECNET에서 돌아가도록 설정된 Ultrix 시스템에서만 사용 가능하다.
    • decnet dst host
      DECNET destination address가 host이면 참이다.
    • decnet host HOST
      DECNET source, destination address중의 하나라도 HOST이면 참이다.
    • ip, arp, rarp, decnet
      ether proto [ip|arp|rarp|decnet]의 약어
    • lat, moprc, mopdl
      ether proto [lat|moprc|mopdl]의 약어
    • tcp, udp, icmp
      ip proto [tcp|udp|icmp]의 약어
    • expr relop expr
      • EXPR
        proto [expr:size]의 형식을 띤다. proto, expr, size에 올 수 있는 것들은 다음과 같다.
        • proto : ether, fddi, ip, arp, rarp, tcp, udp, icmp
        • expr : indicate Byte offset of packet of proto
        • size : optional. indicate the size of bytes in field of interest
        • default is one, and can be two or four
      • RELOP
        !=, =, <=, >=, etc.

      이 조건식을 사용하기 위해서는 먼저 해당하는 Protocol(proto)의 헤더에 관련된 것들을 자세히 알아야만 한다. proto에는 대상이 될 프로토콜을 지정한다. expr에는 프로토콜 헤더의 처음부터의 Byte Offset을 지정하는 식이 들어가게 된다. Size는 Option이며 지정이 안 되어 있을 경우에는 자동으로 1byte를 지칭한다. 따라서 이 조건식을 사용하게 되면 헤더에 포함된 정보를 Bitmask를 사용하여 직 접 원하는 패킷인지를 가려낼 수 있기 때문에, 보다 정밀한 사용이 가능하게 된다.


  • Tcpdump의 사용 예제들

    • security라는 호스트로부터 날아오고, 날아가는 패킷들을 출력
      # tcpdump host security
    • security와 mazinga, getarobo 사이에 날아다니고 있는 패킷들을 출력
      # tcpdump host security and \( mazinga or getarobo \)
    • security에서 elgaim을 제외한 모든 호스트로 날아다니는 IP 패킷들을 출력
      # tcpdump ip host security and not elgaim
    • gateway amurorei를 거치는 ftp에 관련된 패킷들을 출력
      # tcpdump 'gateway amurorei and ( port ftp or ftp-data )'
    • local호스트가 아닌 호스트와 로컬호스트가 맺는 TCP 커넥션의 시작과 마지막 패 킷들을 출력한다(SYN, FIN 패킷).
      # tcpdump 'tcp[13] & 3 != 0 and not src and dst net non-local'
    • gateway amurorei를 지나는 576Byte보다 큰 패킷들을 출력한다
      # tcpdump 'gateway amurorei and ip[2:2] > 576'
    • Ethernet boradcast 혹은 multicast를 통해서 보내진 것이 아닌, IP broadcast 혹 은 multicast 패킷들을 출력한다.
      # tcpdump 'ehter[0] & 1 = 0 and ip[16] >= 224'
    • Echo request/reply가 아닌 ICMP 패킷들을 모두 출력한다.
      # tcpdump 'icmp[0] != 8 and icmp[0] != 0'


  • Tcpdump의 평가

    TCPDUMP는 여러모로 좋은 툴이다. libpcap을 거의 100% 활용한 프로그램의 예이며, 실제로 많은 툴들이 TCPDUMP와 병행하여 돌아가거나, TCPDUMP를 기반으로 제작되었다. TCPDUMP의 막강한 packet filter는 현재 로컬 네트워크 상에서 날아다니고 있는 특정한 패킷들을 실시간으로 기록해 줄 수 있으며, 이를 이용하여 네트워크에서 벌어지는 일들을 네트워크 관리자가 원하는 대로 뽑아 볼 수 있게 해 준다. 또한, 시스템 관리자들에게는 로컬 유저의 외부로의 커넥션들을 감시하고, 또 특정 침입자가 침투 경로로 자주 이용하는 호스트, 혹은 원하지 않는 호스트로부터의 커넥션을 실시간으로 감시할 수 있게 해 준다. libpcap을 이용하여 비슷한 툴을 제작하고자 하는 사람들에게도 TCPDUMP는 가장 훌륭한 예제가 될 것이다.


  • References

    • TCP dump Manual page : written by Van Jacobson, Craig Leres and Steven McCanne, all of the Lawrence Berkeley National Laboratory, University of California, Berkeley, CA.
    • TCP dump Document included in TCP dump package

'IT인생_스크랩 > Linux' 카테고리의 다른 글

젠투 (Gentoo) 리눅스 설치  (0) 2010.12.13
트래픽 패킷 생성도구 Mausezahn 소개합니다.  (0) 2010.06.24
TCPDUMP 사용법  (0) 2010.06.24
리눅스 시스템 Bonding  (0) 2010.06.23
NTP 시간서버 설정  (0) 2010.06.23
리눅스 관리자가 알아야 할 50가지  (0) 2010.06.23


티스토리 툴바