작업하는 서버는 Virtual Machine이고 Centos 7.3에서 수행함

(hypervisor는 kvm)

 

대쉬보드에서 3.5TB 디스크를 추가한다. (이 부분은 생략)

대쉬보드에서 생성할때 디스크 포맷은 하지 않는다. 

용량이 크니까 여기 업체 것은 꼬박 하루가 걸린다.

[root@seonpapa ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda    253:0    0  100G  0 disk 
└─vda1 253:1    0  100G  0 part /
vdb    253:16   0  256G  0 disk [SWAP]
vdc    253:32   0  3.5T  0 disk 

디스크를 ext4로 포맷을 한다.

[root@seonpapa ~]# file -s /dev/vdc
/dev/vdc: data


[root@seonpapa ~]# mkfs -t ext4 /dev/vdc
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
234881024 inodes, 939524096 blocks
46976204 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=3087007744
28672 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, 71663616, 78675968, 
        102400000, 214990848, 512000000, 550731776, 644972544

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

[root@seonpapa ~]# file -s  /dev/vdc
/dev/vdc: Linux rev 1.0 ext4 filesystem data, UUID=c477973b-a02a-4eac-aac9-51acd46f1922 (extents) (64bit) (large files) (huge files)


저렇게까지 하고 마운트를 시켰다.

# mount /dev/vdc /truejp/data

[root@seonpapa data]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda    253:0    0  100G  0 disk 
└─vda1 253:1    0  100G  0 part /
vdb    253:16   0  256G  0 disk [SWAP]
vdc    253:32   0  3.5T  0 disk /truejp/data


파티션을 생성한다. (gpt로 생성한다.)

[root@seonpapa ~]# parted /dev/vdc

(parted) mklabel gpt                                                      
Warning: The existing disk label on /dev/vdc will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? yes

                                                              
(parted) unit GB                                                          
(parted) print

                                                            
Model: Virtio Block Device (virtblk)
Disk /dev/vdc: 3848GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start  End  Size  File system  Name  Flags

(parted) mkpart primary 0 3848
(parted) print                                                            
Model: Virtio Block Device (virtblk)
Disk /dev/vdc: 3848GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags
 1      0.00GB  3848GB  3848GB               primary

(parted) quit                                                             
Information: You may need to update /etc/fstab.

 


[root@seonpapa ~]# lsbkl                                               
-bash: lsbkl: command not found
[root@seonpapa ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda    253:0    0  100G  0 disk 
└─vda1 253:1    0  100G  0 part /
vdb    253:16   0  256G  0 disk [SWAP]
vdc    253:32   0  3.5T  0 disk 
└─vdc1 253:33   0  3.5T  0 part 
vdd    253:48   0  400G  0 disk 


리부팅을 하고 나면 마운트 했던 정보가 사라진다.
/etc/fstab 파일에 내용을 추가한다.

[dre@tjp-db-main ~]$ cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Thu May 15 12:47:18 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/vda1       /                       ext4    defaults        1 1
/dev/vdb       swap                 swap   defaults       0 0
/dev/vdc1      /truejp/data        ext4    defaults       0 0














기존에 MySQL에서 잘 돌아가던 프로세스가

Maria DB로 옮기고 나서 쿼리자체가 실패하는 현상


1. CREATE TABLE 관련 쿼리는 모두 정상 처리됨


2. INSERT 쿼리가 모두 실패함

  - 접속해서 직접 쿼리를 수행해보니 에러발생


INSERT INTO (IP_ADDR) VALUES ("192.168.0.102")

  - 아무리 생각해도 이상해서 " -> ' 로 바꿔서 실행하니 성공


INSERT INTO (IP_ADDR) VALUES ('192.168.0.102')



3. 검색어가 생각이 안남

  - mariadb double quotation mark causes error 라고 검색해봄

    이것 저것 검색결과를 눌러보다 찾아냄

    https://github.com/catfan/Medoo/issues/292



4. 키워드를 찾았으니 maria db 매뉴얼을 찾아봄

    여기에 가보니 sql_mode = "ansi"로 설정해서 그렇다고 함

    https://mariadb.com/kb/en/the-mariadb-library/sql-mode/



5. 일단 현재 사용하는 곳은 엄격한 룰이 필요없으니깐 /etc/my.cnf에서 해당 설정 주석으로 막음



[mysqld]
user=maria

#sql-mode=ANSI_QUOTES,STRICT_ALL_TABLES,STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

이전 포스팅에는 가장 마지막에 있는 1개의 필드만 cut을 사용해서 가져오는 방법을 적었었다.

쓰다보니 완전히 반대로 마지막 1개 필드만 제외한 나머지 전체 필드가 필요한 상황이 생겼다.


PPAAPP_TrafficControl.c@@/main/PPP_X-CHECK_R330/1010312 에서 

/1010312를 제외한 나머지 정보를 가져와야 한다.


PPAAPP_TrafficControl.c@@/main/PPP_X-CHECK_R330


% echo "PPAAPP_TrafficControl.c@@/main/PPP_X-CHECK_R330/1010312" | rev | cut -d '/' -f2- | rev
PPAAPP_TrafficControl.c@@/main/PPP_X-CHECK_R330


사용한 명령어를 아래에 다시 풀어씀

% echo "PPAAPP_TrafficControl.c@@/main/PPP_X-CHECK_R330/1010312" \
? | rev | cut -d '/' -f2- | rev
PPAAPP_TrafficControl.c@@/main/PPP_X-CHECK_R330




..

전체 경로에서 가장 우측에 있는 파일 명만 가져오고 싶다.

방법을 잘 모르겠다.


cut을 사용해서 가져오는 방법이 있었다.


% echo "/home/byungwoo/c/src/util/request/request_test.c" | rev | cut -d '/' -f 1 | rev



이하 예제


# '/'로 시작하니까 아무 결과 없음
% echo "/home/byungwoo/c/src/util/request/request_test.c" \
? | cut -d '/' -f 1

# '1/2/3..
% echo "/home/byungwoo/c/src/util/request/request_test.c" \
? | cut -d '/' -f 2
home

# rev로 뒤집어서 하면 간편함  <--- rev
% echo "/home/byungwoo/c/src/util/request/request_test.c" \
? | rev | cut -d '/' -f 1 | rev
request_test.c






..

  1. 굿 2021.02.19 03:35

    한수배웠습니다~~ 재밌게 잘보고 가요 ㅎㅎㅎ

기존에 #ifdef로 이력을 남겼던 것을 찾아서

삭제하는 작업을 하고 있다.

해당 파일을 grep으로 찾아서 열어보고 처리해야 하는데 번거롭다.


파일명만 가져다가 한번에 사용하고 싶어서

문자열 자르기를 찾아보았다.


이하 예제는 범용적인 이름으로 다 변경함


1. grep 수행


% grep _UPGRADE_FRAMEWORK_ *.[ch]
TEST_Options.c:14:#ifndef _UPGRADE_FRAMEWORK_
TEST_SendResponse.c:14:#ifndef _UPGRADE_FRAMEWORK_
TEST_Session.c:16:#ifndef _UPGRADE_FRAMEWORK_
TEST_Stats.c:1:#ifndef _UPGRADE_FRAMEWORK_
TEST_Stats.c:23:#ifdef _UPGRADE_FRAMEWORK_
TEST_Stats.h:7:#ifndef _UPGRADE_FRAMEWORK_


2. grep, awk 수행


% grep _UPGRADE_FRAMEWORK_ *.[ch] | awk '{print $1}'
TEST_Options.c:14:#ifndef
TEST_SendResponse.c:14:#ifndef
TEST_Session.c:16:#ifndef
TEST_Stats.c:1:#ifndef
TEST_Stats.c:23:#ifdef
TEST_Stats.h:7:#ifndef


3. grep, awk, cut 수행



% grep _UPGRADE_FRAMEWORK_ *.[ch] | awk '{print $1}' | cut -d ':' -f1
TEST_Options.c
TEST_SendResponse.c
TEST_Session.c
TEST_Stats.c
TEST_Stats.c
TEST_Stats.h



4. grep, awk, cut, uniq 수행


% grep _UPGRADE_FRAMEWORK_ *.[ch] | awk '{print $1}' | cut -d ':' -f1 | uniq TEST_Options.c TEST_SendResponse.c TEST_Session.c TEST_Stats.c <-- 1개로 줄어듬 TEST_Stats.h








.

랜선끼고 ifup or ifconfig eth$N up
IFF_UP = 1 // Interface is up
IFF_RUNNING = 1 // Resources allocated

랜선끼고 ifdown or ifconfig eth$N down
IFF_UP = 0 // Interface is up
IFF_RUNNING = 0 // Resources allocated

랜선뽑고 ifup or ifconfig eth$N up
IFF_UP = 1 // Interface is up
IFF_RUNNING = 0 // Resources allocated

랜선뽑고 ifdown or ifconfig eth$N down
IFF_UP = 0 // Interface is up
IFF_RUNNING = 0 // Resources allocated



그렇다면 if, ifconfig 명령의 차이는?

RHET5 기준 (https://access.redhat.com/solutions/27166)



  • An "ifconfig" command and "ifup" or "ifdown" command can activate network interfaces. "ifconfig" directly controls network interfaces, however "ifup" or "ifdown" executes "/etc/sysconfig/network-scripts/ifup-" or "ifdown-" scripts. The scripts use an ip command.

  • "ifconfig" and "ip" commands use ioctl() to activate or deactivate network interfaces. "ifconfig" flags network interfaces 'IFF_UP | IFF_RUNNING', however "ip" flags that 'IFF_UP'.

  • An "ifconfig up eth0" activates eth0 but does not setup IP addresses, however an "ifup eth0" setup IP addresses or other options based by an ifcfg-eth0, because the "ifup" uses an "ifup-eth*" script.

  • The ifup command will also configure any static routes that are configured in the network-scripts directory. The ifconfig command will not.


UDP 특성

  • 패킷 유실
    • UDP를 받아들이는 입장에서는 들어오는 UDP를 memcpy 로 큐에 밀어넣는데 발생하는 비용이 소요되고 이 큐에 있는 것을 다른 쓰레드에서 소비하는데 제대로 소비하지 못하면 큐도 밀려 UDP 패킷 유실이 발생 이것은 최소한의 소비 패턴과 패킷의 들어오는 발생 빈도를 바탕으로 잘 튜닝을 해야하는 문제입니다. 지훈현서 블로그 참고
    • UDP 헤더의 목적은 UDP 헤더 내 Port # = 2152를 통해 UDP 헤더 다음에 GTP 헤더가 있음을 알리는 것입니다. UDP는 TCP와 달리 재전송 mechanism이 없기 때문에 eNB와 EPC간 전송되는 유저 데이터에 대한 재전송은 불가능하고, 이는 단말(UE)과 목적지(예. naver 서버)간에 TCP 재전송 혹은 응용 레벨의 재전송 방법에 의존해야 합니다.
    • eNB와 EPC간 user data의 모양 [Outer IP][UDP][GTP][Inner IP][TCP or UDP][UE Payload] 참고1 참고2

'Linux' 카테고리의 다른 글

[문자열 자르기] awk, cut을 이용  (0) 2017.04.06
ifup, ifdown과 ifconfig up, ifconfig down의 차이 (RHET5 기준)  (0) 2016.12.13
[UDP] 특성  (0) 2016.12.06
[Linux] Bonding 본딩 설정  (0) 2016.12.05
[SQlite3] 자주쓰는 명령어  (0) 2016.11.23
[GDB] 자주 쓰는 명령어  (0) 2016.11.17

Bonding 이란?

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


Linux kernel에 내장된 기술

2개 이상의 Network Interface Card를 논리적으로 1개의 interface로 묶음

Bandwidth, redundancy 향상

- https://www.kernel.org/doc/Documentation/networking/bonding.txt



Bonding 구성 방법

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


- Interface alias 'bond0:1 bond0:2'를 이용하여 여러 IP 주소 지정

https://oracle-base.com/articles/linux/nic-channel-bonding



- 일반 본딩 설정 링크 모음

http://onecellboy.tistory.com/279


Bonding mode

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


참고: http://root.so/archives/48


- balance-rr    or 0: 2개의 NIC에 순차적 분배 round robin

- active-backup or 1: 네트워크 이중화

- balance-xor   or 2: src MAC에서 dst MAC으로 비트 연산을 통하여 분배

- broadcast     or 3: 모든 NIC에 동일한 패킷을 broadcast

- 802.3ad       or 4: 802.3ad 지원하는 스위치에서 Dynamic Link Aggregation 정책으로 분배

- balance-tlb   or 5: 내보내지는 트래픽은 분산되어 송출

- balance-alb   or 6: 들어오는 트래픽을 분산 처리하여 수신

'Linux' 카테고리의 다른 글

ifup, ifdown과 ifconfig up, ifconfig down의 차이 (RHET5 기준)  (0) 2016.12.13
[UDP] 특성  (0) 2016.12.06
[Linux] Bonding 본딩 설정  (0) 2016.12.05
[SQlite3] 자주쓰는 명령어  (0) 2016.11.23
[GDB] 자주 쓰는 명령어  (0) 2016.11.17
ctags를 cpp에서 사용하려면  (0) 2015.11.19

+ Recent posts