MooseFS의 일부 메커니즘과 내용[업데이트 완료]
#yum install -y fuse-devel
error:checking for zlibVersion in -lz... no
#yum install -y zlib-devel
packs:
wget http://sourceforge.net/projects/moosefs/files/moosefs/1.6.27/mfs-1.6.27-1.tar.gz/download
configure:
--disable-mfsmaster
--disable-mfschunkserver
--disable-mfsmount
MfsMaster/loger Install:
yum install -y fuse-devel zlib-devel
useradd mfs -s /sbin/nologin
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmount --disable-mfschunkserver
make && make install
MfsMount Install:
yum install -y fuse-devel zlib-devel
useradd mfs -s /sbin/nologin
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfsmount
make && make install
MfsMount Install:
yum install -y fuse-devel zlib-devel
useradd mfs -s /sbin/nologin
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver
make && make install
레코드:
디렉토리 아키텍처:
[root@Salt-Stack-Server-180 mfs]# tree
.
기본 설정 - etc# 프로필 (마스터가 mfsmout과 mfschunks를 설치하지 않았기 때문)
│ └── mfs
│ ├── mfsexports.cfg # 액세스 권한 파일
│ ├── mfsmaster.cfg # 기본 프로파일
│ ├── mfsmetalogger.cfg # 로깅 파일
│ └── mfstopology.cfg #
├── sbin
│ ├── mfscgiserv
│ ├── mfsmaster
│ ├── mfsmetadump
│ ├── mfsmetalogger
│ └── mfsmetarestore
기본 정보 - share# 도움말 문서 및 cgi, WEB 인터페이스
│ ├── man
│ │ ├── man1
│ │ ├── man5
│ │ │ ├── mfsexports.cfg.오
│ │ │ ├── mfsmaster.cfg.오
│ │ │ ├── mfsmetalogger.cfg.오
│ │ │ └── mfstopology.cfg.오
│ │ ├── man7
│ │ │ ├── mfs.칠
│ │ │ └── moosefs.칠
│ │ └── man8
│ │ ├── mfscgiserv.팔
│ │ ├── mfsmaster.팔
│ │ ├── mfsmetalogger.팔
│ │ └── mfsmetarestore.팔
│ └── mfscgi
│ ├── chart.cgi
│ ├── err.gif
│ ├── favicon.ico
│ ├── index.html
│ ├── logomini.png
│ ├── mfs.cgi
│ └── mfs.css
ε-var# 로깅
└── mfs
├── changelog.0.mfs
├── changelog.1.mfs
├── metadata.mfs.back
├── metadata.mfs.back.일
├── sessions.mfs
└── stats.mfs
./var/mfs
[root@Salt-Stack-Server-180 mfs]# ls
changelog.0.mfs changelog.1.mfs metadata.mfs.back metadata.mfs.back.1 sessions.mfs stats.mfs
[root@Salt-Stack-Server-180 mfs]# head -n 10 changelog.1.mfs
0: 1383311888|SESSION():1
1: 1383311894|ACCESS(1)
2: 1383311972|ACCESS(1)
3: 1383311975|ACCESS(1)
4: 1383312013|CREATE(1,www.img,f,420,999,999,0):2
5: 1383312013|ACQUIRE(2,1)
6: 1383312013|WRITE(2,0,1):1
7: 1383312013|LENGTH(2,1556480)
8: 1383312013|UNLOCK(1)
9: 1383312013|WRITE(2,0,0):1
[root@Salt-Stack-Server-180 mfs]# head -n 10 changelog.0.mfs
84495: 1383315313|ACCESS(1)
84496: 1383315316|ACCESS(1)
84497: 1383315328|CREATE(1,190.txt,f,420,999,999,0):3
84498: 1383315328|ACQUIRE(3,1)
84499: 1383315328|WRITE(3,0,1):314
84500: 1383315328|LENGTH(3,11)
84501: 1383315328|UNLOCK(314)
84502: 1383315346|ACCESS(1)
84503: 1383315349|ACCESS(1)
84504: 1383315351|ACCESS(1)
[root@Salt-Stack-Server-180 mfs]# tail -n 1 changelog.1.mfs
84494: 1383314326|ACCESS(1)
[root@Salt-Stack-Server-180 mfs]# head -n 1 changelog.0.mfs
84495: 1383315313|ACCESS(1)
술을 끓여 차를 음미하다:changelog를 볼 수 있다.1.mfs의 끝은 0의 시작이고 파일이 만들어지는 과정을 볼 수 있습니다.Client는 chunks가 끊겼든 안 끊겼든 마운트할 수 있고 디렉터리 정보가 있습니다. 디렉터리 정보는 Master의 메모리에 존재합니다.
Chunks
[root@MfsMount-200 mfschunks1]# ls
00 08 10 18 20 28 30 38 40 48 50 58 60 68 70 78 80 88 90 98 A0 A8 B0 B8 C0 C8 D0 D8 E0 E8 F0 F8
01 09 11 19 21 29 31 39 41 49 51 59 61 69 71 79 81 89 91 99 A1 A9 B1 B9 C1 C9 D1 D9 E1 E9 F1 F9
02 0A 12 1A 22 2A 32 3A 42 4A 52 5A 62 6A 72 7A 82 8A 92 9A A2 AA B2 BA C2 CA D2 DA E2 EA F2 FA
03 0B 13 1B 23 2B 33 3B 43 4B 53 5B 63 6B 73 7B 83 8B 93 9B A3 AB B3 BB C3 CB D3 DB E3 EB F3 FB
04 0C 14 1C 24 2C 34 3C 44 4C 54 5C 64 6C 74 7C 84 8C 94 9C A4 AC B4 BC C4 CC D4 DC E4 EC F4 FC
05 0D 15 1D 25 2D 35 3D 45 4D 55 5D 65 6D 75 7D 85 8D 95 9D A5 AD B5 BD C5 CD D5 DD E5 ED F5 FD
06 0E 16 1E 26 2E 36 3E 46 4E 56 5E 66 6E 76 7E 86 8E 96 9E A6 AE B6 BE C6 CE D6 DE E6 EE F6 FE
07 0F 17 1F 27 2F 37 3F 47 4F 57 5F 67 6F 77 7F 87 8F 97 9F A7 AF B7 BF C7 CF D7 DF E7 EF F7 FF
[root@MfsMount-200 EF]# ll
total 65544
-rw-r----- 1 mfs mfs 67113984 Nov 1 22:04 chunk_00000 00000 0000E F_00000 001.mfs
[root@MfsMount-200 EF]# pwd
/mfs/mfschunks1/EF
술을 끓이고 차를 마신다: 16진수 두 자리 이름 폴더, 단일 디렉터리, 저장 방식은chunk_16비트 16제수_8자리수.mfs
[root@MfsMount-200 www]# ll
total 25067521
-rw-r--r-- 1 999 999 33 Nov 1 22:16 190.txt
-rw-r--r-- 1 999 999 4697620480 Nov 1 22:24 20g1.img
-rw-r--r-- 1 999 999 20971520000 Nov 1 21:26 www.img
[root@MfsMount-200 www]# ll
total 25067521
-rw-r--r-- 1 mfs mfs 33 Nov 1 22:16 190.txt
-rw-r--r-- 1 mfs mfs 4697620480 Nov 1 22:24 20g1.img
-rw-r--r-- 1 mfs mfs 20971520000 Nov 1 21:26 www.img
술 끓이고 차 마시기: 응용 프로그램의 UID, GID가 맞아야 합니다.
술을 끓여 차를 마시다: MooseFS는 메인 프로세스를 죽일 수가 없어요. 킬은 회복해야 해요.해볼 수 있습니다:/usr/local/mfs/sbin/mfsmetarestore -a.물론 마지막 일지라고 하면 되지.
다음 절차 참조:http://sery.blog.51cto.com/10037/263515
1. 새 MFS 메타데이터 서버를 설치합니다.
2. 현재 메타데이터 서버(master) 또는 로그 백업 서버(mfsmetalogger)에서 백업 파일 메타데이터를 복사합니다.mfs.back/metadate_ml.mfs.새 메타데이터 서버 디렉터리로 백업합니다. (metadata.mfs.back은 정해진 시간에crontab로 백업해야 합니다.)
3. 현재 메타데이터 서버 (master) 나 로그 백업 서버 (mfsmetalogger) 에서 메타데이터 서버 데이터 디렉터리 (/usr/local/mfs/var/mfs) 를 이 새로운 메타데이터 서버로 복사합니다.
4. 원래의 메타데이터 서버를 정지한다. (컴퓨터를 끄거나 네트워크 서비스를 정지한다.)
5. 새 메타데이터 서버의 ip를 원래 서버의 ip로 변경합니다.
6. 데이터 복구 작업을 실행합니다. 명령은: mfsmetarestore-m metadata입니다.mfs.back -o metadata.mfs changelog_ml.*.mfs 복구에 성공한 후 새로운 메타데이터 서비스 시작을 실행합니다.
7. 새로운 메타데이터 서비스/usr/local/mfs/sbin/mfsmasterstart 시작
8. MFS 클라이언트에서 MFS 스토리지의 데이터가 복구 전과 일치하는지 확인합니다.정상 방문 여부 등등.
테스트:
[root@Salt-Stack-Server-180 var]# tar cvzf mfs.tar.gz mfs
mfs/
mfs/metadata.mfs.back
mfs/sessions.mfs
mfs/.mfsmaster.lock
mfs/changelog.0.mfs
[root@Salt-Stack-Server-180 var]# ls
mfs mfs.tar.gz
[root@Salt-Stack-Server-180 mfs]# pwd
/usr/local/mfs/var/mfs
[root@Salt-Stack-Server-180 var]# /sbin/pidof mfsmaster
5778
[root@Salt-Stack-Server-180 var]# kill -9 `/sbin/pidof mfsmaster`
[root@Salt-Stack-Server-180 var]# ps aux |grep mfsmaster |grep -v grep
[root@Salt-Stack-Server-180 var]#
[root@Salt-Stack-Server-180 var]# /usr/local/mfs/sbin/mfsmaster start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmaster modules ...
loading sessions ... ok
sessions file has been loaded
exports file has been loaded
mfstopology: incomplete definition in line: 7
mfstopology: incomplete definition in line: 7
mfstopology: incomplete definition in line: 22
mfstopology: incomplete definition in line: 22
mfstopology: incomplete definition in line: 28
mfstopology: incomplete definition in line: 28
topology file has been loaded
loading metadata ...
can't open metadata file'
if this is new instalation then rename /usr/local/mfs/var/mfs/metadata.mfs.empty as /usr/local/mfs/var/mfs/metadata.mfs
init: file system manager failed !!!
error occured during initialization - exiting
복구:
[root@Salt-Stack-Server-180 var]# mv mfs mfs.back
[root@Salt-Stack-Server-180 var]# tar zxvf mfs.tar.gz
mfs/
mfs/metadata.mfs.back
mfs/sessions.mfs
mfs/.mfsmaster.lock
mfs/changelog.0.mfs
[root@Salt-Stack-Server-180 var]# ls
mfs mfs.back mfs.tar.gz
[root@Salt-Stack-Server-180 var]# /usr/local/mfs/sbin/mfsmetarestore -a
loading objects (files,directories,etc.) ... ok
loading names ... ok
loading deletion timestamps ... ok
loading chunks data ... ok
checking filesystem consistency ... ok
connecting files and chunks ... L
C
ok
store metadata into file: /usr/local/mfs/var/mfs/metadata.mfs
[root@Salt-Stack-Server-180 var]# /usr/local/mfs/sbin/mfsmaster start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmaster modules ...
loading sessions ... ok
sessions file has been loaded
exports file has been loaded
mfstopology: incomplete definition in line: 7
mfstopology: incomplete definition in line: 7
mfstopology: incomplete definition in line: 22
mfstopology: incomplete definition in line: 22
mfstopology: incomplete definition in line: 28
mfstopology: incomplete definition in line: 28
topology file has been loaded
loading metadata ...
loading objects (files,directories,etc.) ... ok
loading names ... ok
loading deletion timestamps ... ok
loading chunks data ... ok
checking filesystem consistency ... ok
connecting files and chunks ... ok
all inodes: 1
directory inodes: 1
file inodes: 0
chunks: 0
metadata file has been loaded
no charts data file - initializing empty charts
master <-> metaloggers module: listen on *:9419
master <-> chunkservers module: listen on *:9420
main master server module: listen on *:9421
mfsmaster daemon initialized properly
[root@Salt-Stack-Server-180 var]#
데이터 저장 프로세스:
데이터 저장 서버야말로 진정으로 사용자의 데이터를 저장하는 서버이다. 파일을 저장할 때 먼저 파일을 블록으로 나눈 다음에 이 블록을 데이터 저장 서버 간에 서로 복제하는 동시에 데이터 저장 서버는 관리 서버를 연결하고 관리 서비스 스케줄링에 따라 고객에게 데이터 전송을 제공한다.데이터 스토리지 서버가 여러 개 있을 수 있으며 수량이 많을수록 신뢰성이 높고 MFS에서 사용할 수 있는 디스크 공간도 넓어집니다.
클라이언트가 마운트한 후 데이터를 씁니다.
[root@MfsMount-200 www]# dd if=/dev/zero of=OneBig.img bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 23.7381 s, 44.2 MB/s
클라이언트 chunks
read(10, "\0", 1) = 1
read(16, "\0\0\0\324\0\1\0\30", 8) = 8
read(16, "\0\0\0\0\0\0\1\201\0\0\2&\2%\0\0\0\1\0\0\327\227\216\353\0\0\0\0\0\0\0\0"..., 65560) = 65560
futex(0x852c248, FUTEX_WAKE_OP_PRIVATE, 1, 1, 0x852c244, {FUTEX_OP_SET, 0, FUTEX_OP_CMP_GT, 1}) = 1
futex(0x852c2a4, FUTEX_WAKE_PRIVATE, 1) = 1
write(16, "\0\0\0\323\0\0\0\r\0\0\0\0\0\0\1\201\0\0\2$\0", 21) = 21
write(16, "\0\0\0\323\0\0\0\r\0\0\0\0\0\0\1\201\0\0\2%\0", 21) = 21
poll([{fd=5, events=POLLIN}, {fd=13, events=POLLIN}, {fd=15, events=POLLIN}, {fd=8, events=POLLIN}, {fd=10, events=POLLIN}, {fd=16, events=POLLIN}], 6, 50) = 2 ([{fd=10, revents=POLLIN}, {fd=16, revents=POLLIN}])
gettimeofday({1383559161, 232654}, NULL) = 0
read(10, "\0", 1) = 1
read(16, "\0\0\0\324\0\1\0\30", 8) = 8
read(16, "\0\0\0\0\0\0\1\201\0\0\2'\2&\0\0\0\1\0\0\327\227\216\353\0\0\0\0\0\0\0\0"..., 65560) = 65560
futex(0x852c248, FUTEX_WAKE_OP_PRIVATE, 1, 1, 0x852c244, {FUTEX_OP_SET, 0, FUTEX_OP_CMP_GT, 1}) = 1
futex(0x852c2a4, FUTEX_WAKE_PRIVATE, 1) = 1
poll([{fd=5, events=POLLIN}, {fd=13, events=POLLIN}, {fd=15, events=POLLIN}, {fd=8, events=POLLIN}, {fd=10, events=POLLIN}, {fd=16, events=POLLIN|POLLOUT}], 6, 50) = 2 ([{fd=10, revents=POLLIN}, {fd=16, revents=POLLIN|POLLOUT}])
gettimeofday({1383559161, 233732}, NULL) = 0
read(10, "\0", 1) = 1
read(16, "\0\0\0\324\0\1\0\30", 8) = 8
read(16, "\0\0\0\0\0\0\1\201\0\0\2(\2'\0\0\0\1\0\0\327\227\216\353\0\0\0\0\0\0\0\0"..., 65560) = 65560
futex(0x852c248, FUTEX_WAKE_OP_PRIVATE, 1, 1, 0x852c244, {FUTEX_OP_SET, 0, FUTEX_OP_CMP_GT, 1}) = 1
futex(0x852c2a4, FUTEX_WAKE_PRIVATE, 1^C <unfinished ...>
ChunkServer1:
poll([{fd=5, events=POLLIN}, {fd=14, events=POLLIN}, {fd=16, events=POLLIN}, {fd=8, events=POLLIN}, {fd=11, events=POLLIN}, {fd=18, events=POLLIN}], 6, 50) = 1 ([{fd=18, revents=POLLIN}])
read(18, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 3448) = 1448
poll([{fd=5, events=POLLIN}, {fd=14, events=POLLIN}, {fd=16, events=POLLIN}, {fd=8, events=POLLIN}, {fd=11, events=POLLIN}, {fd=18, events=POLLIN}], 6, 50) = 1 ([{fd=18, revents=POLLIN}])
read(18, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 2000) = 1448
poll([{fd=5, events=POLLIN}, {fd=14, events=POLLIN}, {fd=16, events=POLLIN}, {fd=8, events=POLLIN}, {fd=11, events=POLLIN}, {fd=18, events=POLLIN}], 6, 50) = 1 ([{fd=18, revents=POLLIN}])
read(18, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 552) = 552
futex(0xd4f16c, FUTEX_WAKE_OP_PRIVATE, 1, 1, 0xd4f168, {FUTEX_OP_SET, 0, FUTEX_OP_CMP_GT, 1}) = 1
futex(0xd4f1c8, FUTEX_WAKE_PRIVATE, 1) = 1
poll([{fd=5, events=POLLIN}, {fd=14, events=POLLIN}, {fd=16, events=POLLIN}, {fd=8, events=POLLIN}, {fd=11, events=POLLIN}, {fd=18, events=POLLIN}], 6, 50) = 1 ([{fd=11, revents=POLLIN}])
read(11, "\0", 1) = 1
poll([{fd=5, events=POLLIN}, {fd=14, events=POLLIN}, {fd=16, events=POLLIN}, {fd=8, events=POLLIN}, {fd=11, events=POLLIN}, {fd=18, events=POLLIN|POLLOUT}], 6, 50) = 1 ([{fd=18, revents=POLLOUT}])
하나의 작은 파일을 작성하려면 다음과 같이 하십시오.
poll([{fd=5, events=POLLIN}, {fd=14, events=POLLIN}, {fd=16, events=POLLIN}, {fd=8, events=POLLIN}, {fd=11, events=POLLIN}], 5, 50) = 0 (Timeout)
poll([{fd=5, events=POLLIN}, {fd=14, events=POLLIN}, {fd=16, events=POLLIN}, {fd=8, events=POLLIN}, {fd=11, events=POLLIN}], 5, 50) = 0 (Timeout)
poll([{fd=5, events=POLLIN}, {fd=14, events=POLLIN}, {fd=16, events=POLLIN|POLLOUT}, {fd=8, events=POLLIN}, {fd=11, events=POLLIN}], 5, 50) = 1 ([{fd=16, revents=POLLOUT}])
write(16, "\0\0\0\0\0\0\0\0", 8) = 8
술을 끓여 차를 마시다: 비동기적으로 데이터를 복제한 것을 증명한다.
개념 참조:http://cwtea.blog.51cto.com/4500217/1318037
따라서 MFS의 메커니즘은 다음과 같습니다.
쓰기 데이터:
클라이언트(마운트 디렉터리에 로컬로 쓰기) -->Master(파일을 블록으로 나누어 각각chunks로 복사하기(정의 가능)
<[email protected]> 10:44:17
chunks? chunks?
(260114787) 10:45:22
chunks , chunks
데이터 읽기:
Client(마운트 디렉터리 읽기) -->Master(읽기 Chunks 주소 할당) -->Chunks(데이터 교환)
술을 끓여 차를 음미하다: 반분포식이기 때문에 마지막 결점을 남길 때 파일이 정확하고 데이터를 쓰고 읽는 과정이 한 걸음 더 많으면 단일 파일은 전통적인 것보다 느릴 것이다.여러 개의 파일 장점이 나와 서로 다른chunks를 나누어 읽을 수 있다.
테스트:
로컬 데이터 쓰기와 mfs 데이터 쓰기 (가상 컴퓨터이기 때문에 모든 것이 자신의 하드디스크 IO이기 때문에 정확하지 않습니다. 폴을 사용하지 않아도 epoll을 사용하지 않아도 약간의 영향을 미칠 수 있습니다.)
분석: (속도가 3배 적음)
물리적 디스크 IO/V1-master 쓰기 로그 및metedata
V2. - Chunks. 여기도 써야 돼요.
V3-mountandchunks write () 여기 쓰세요.
술을 끓여 차를 음미하다: 위의 관점의 일부분은 틀렸다. 문서는 조각으로 나누고, 조각을 나누어 서로 다른chunks에 쓴다.세 개의 chunks만 있고 던전 수는 3이기 때문에 던전 수에 따라 조각을 나누어 쓰는지 모든 위에 쓰는지 모르겠다. 모든 위에 따로 쓰는 것은 아니겠지.
Two: 모든 위에 나누어 쓰면 서로 동기화할 때 왼쪽과 왼쪽만 동기화됩니다.
첨부 파일 보기:
로그:
master:
[root@Salt-Stack-Server-180 mfs]# ls
changelog.5.mfs changelog.7.mfs metadata.mfs.back.1 stats.mfs
changelog.6.mfs metadata.mfs.back sessions.mfs
logger:
[root@MfsMount-200 mfs]# ls
changelog_ml_back.0.mfs csstats.mfs metadata_ml.mfs.back
changelog_ml_back.1.mfs metadata.mfs.empty sessions_ml.mfs
동기화 시작:
[root@MfsMount-200 mfs]# pwd
/usr/local/mfs/var/mfs
[root@MfsMount-200 mfs]# cd ..
[root@MfsMount-200 var]# mv mfs mfs.back
[root@MfsMount-200 var]# mkdir mfs
[root@MfsMount-200 var]# chown mfs.mfs mfs
[root@MfsMount-200 var]# ll
total 8
drwxr-xr-x 2 mfs mfs 4096 Nov 5 00:10 mfs
drwxr-xr-x 2 mfs mfs 4096 Nov 5 00:10 mfs.back
[root@MfsMount-200 var]# /usr/local/mfs/sbin/mfsmetalogger start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmetalogger modules ...
mfsmetalogger daemon initialized properly
[root@MfsMount-200 var]# ls
mfs mfs.back
[root@MfsMount-200 var]# cd mfs
[root@MfsMount-200 mfs]# ls
changelog_ml_back.0.mfs metadata_ml.mfs.back sessions_ml.mfs
changelog_ml_back.1.mfs metadata_ml.mfs.back.1
크기 비교:
[root@Salt-Stack-Server-180 mfs]# du -sh metadata.mfs.back metadata.mfs.back.1
24Kmetadata.mfs.back
24Kmetadata.mfs.back.1
[root@MfsMount-200 mfs]# du -sh metadata_ml.mfs.back metadata_ml.mfs.back.1
24Kmetadata_ml.mfs.back
24Kmetadata_ml.mfs.back.1
로그 서버는 로그를 백업하지 않고 데이터만 백업합니다.그래서 메인 서버의 시간 로그를 잘 저장해야 합니다.메인 서버의 백이 닫히면 멈춥니다.개명하는 과정이야.그러니 죽일 수는 없고, 스스로 그만두게 해야 한다.
[root@Salt-Stack-Server-180 mfs]# ll metadata.mfs.back*
-rw-r----- 1 mfs mfs 21771 Nov 5 00:00 metadata.mfs.back
-rw-r----- 1 mfs mfs 21771 Nov 4 23:00 metadata.mfs.back.1
[root@Salt-Stack-Server-180 mfs]# ps aux |grep mfs
root 1428 0.0 1.5 185544 15280 ? S Nov04 0:11 python /usr/local/mfs/sbin/mfscgiserv start
mfs 5817 0.1 10.0 118428 101972 ? S< Nov04 0:33 /usr/local/mfs/sbin/mfsmaster start
root 6017 0.0 0.0 103236 852 pts/0 S+ 00:13 0:00 grep mfs
[root@Salt-Stack-Server-180 mfs]# /usr/local/mfs/sbin/mfsmaster stop
sending SIGTERM to lock owner (pid:5817)
waiting for termination ... terminated
[root@Salt-Stack-Server-180 mfs]# ps aux |grep mfs
root 1428 0.0 1.5 185544 15280 ? S Nov04 0:11 python /usr/local/mfs/sbin/mfscgiserv start
root 6020 0.0 0.0 103236 848 pts/0 S+ 00:14 0:00 grep mfs
[root@Salt-Stack-Server-180 mfs]# ll metadata.mfs*
-rw-r----- 1 mfs mfs 21771 Nov 5 00:14 metadata.mfs
-rw-r----- 1 mfs mfs 21771 Nov 5 00:00 metadata.mfs.back.1
로그 복구:
[root@Salt-Stack-Server-180 var]# cp -rfp mfs mfs.back
[root@Salt-Stack-Server-180 var]# ls
mfs mfs.back
[root@Salt-Stack-Server-180 var]# ps aux |grep mfs
mfs 15845 0.1 9.3 109800 94720 ? S< 00:44 0:00 /usr/local/mfs/sbin/mfsmaster start
root 15848 0.1 1.4 184784 14648 ? S 00:45 0:00 python /usr/local/mfs/sbin/mfscgiserv start
root 15854 0.0 0.0 103236 852 pts/0 S+ 00:48 0:00 grep mfs
[root@Salt-Stack-Server-180 var]# kill -9 15845
[root@Salt-Stack-Server-180 var]# pwd
/usr/local/mfs/var
클라이언트 중단:
복구:
[root@Salt-Stack-Server-180 var]# mv mfs mfs.revo
[root@Salt-Stack-Server-180 var]# ls
mfs.back mfs.revo
[root@Salt-Stack-Server-180 var]# mkdir mfs
[root@Salt-Stack-Server-180 var]# chown -R mfs.mfs mfs
[root@Salt-Stack-Server-180 var]# ll mfs -d
drwxr-xr-x 2 mfs mfs 4096 Nov 5 00:50 mfs
metadata:
[root@Salt-Stack-Server-180 mfs]# scp [email protected]:/usr/local/mfs/var/mfs/metadata_ml.mfs.back ./
[email protected]'s password:'
metadata_ml.mfs.back 100% 95 0.1KB/s 00:00
[root@Salt-Stack-Server-180 mfs]# ls
metadata_ml.mfs.back
[root@Salt-Stack-Server-180 mfs]# chown mfs.mfs *
[root@Salt-Stack-Server-180 mfs]# ll
total 4
-rw-r----- 1 mfs mfs 95 Nov 5 00:55 metadata_ml.mfs.back
loger:
[root@Salt-Stack-Server-180 mfs]# cp -rfp ../mfs.revo/changelog.0.mfs ./
[root@Salt-Stack-Server-180 mfs]# ll
total 8
-rw-r----- 1 mfs mfs 235 Nov 5 00:47 changelog.0.mfs
-rw-r----- 1 mfs mfs 95 Nov 5 00:55 metadata_ml.mfs.back
복구:
[root@Salt-Stack-Server-180 mfs]# /usr/local/
bin/ games/ include/ lib64/ mfs/ sbin/ src/
etc/ gateone/ lib/ libexec/ nagios/ share/
[root@Salt-Stack-Server-180 mfs]# /usr/local/mfs/
etc/ sbin/ share/ var/
[root@Salt-Stack-Server-180 mfs]# /usr/local/mfs/
etc/ sbin/ share/ var/
[root@Salt-Stack-Server-180 mfs]# /usr/local/mfs/sbin/mfs
mfscgiserv mfsmaster mfsmetadump mfsmetalogger mfsmetarestore
[root@Salt-Stack-Server-180 mfs]# /usr/local/mfs/sbin/mfsmetarestore -a
file 'metadata.mfs.back' not found - will try 'metadata_ml.mfs.back' instead
loading objects (files,directories,etc.) ... ok
loading names ... ok
loading deletion timestamps ... ok
loading chunks data ... ok
checking filesystem consistency ... ok
connecting files and chunks ... L
C
ok
store metadata into file: /usr/local/mfs/var/mfs/metadata.mfs
시작:
[root@Salt-Stack-Server-180 mfs]# /usr/local/mfs/sbin/mfsmaster start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmaster modules ...
loading sessions ... file not found
if it is not fresh installation then you have to restart all active mounts !!!
exports file has been loaded
mfstopology: incomplete definition in line: 7
mfstopology: incomplete definition in line: 7
mfstopology: incomplete definition in line: 22
mfstopology: incomplete definition in line: 22
mfstopology: incomplete definition in line: 28
mfstopology: incomplete definition in line: 28
topology file has been loaded
loading metadata ...
loading objects (files,directories,etc.) ... ok
loading names ... ok
loading deletion timestamps ... ok
loading chunks data ... ok
checking filesystem consistency ... ok
connecting files and chunks ... ok
all inodes: 1
directory inodes: 1
file inodes: 0
chunks: 0
metadata file has been loaded
no charts data file - initializing empty charts
master <-> metaloggers module: listen on *:9419
master <-> chunkservers module: listen on *:9420
main master server module: listen on *:9421
mfsmaster daemon initialized properly
복구 후 일부 데이터가 손실됩니다.로그 간격
기타:
mfsgetgoal: mfs 디렉터리, 파일의 복사본 수 가져오기
mfssetgoal: mfs 디렉터리, 파일의 복사본 수 설정
mfscheckfile: 복사본 보기 간단
mfsfileinfo: 상세한 복사본 수,chunks/분할 보기
mfsdirinfo: 수량의 방법으로 mfsfileinfo 보이기
mfsgettrashtime: 쓰레기통을 가져오는 간격
mfssettrashtime: 쓰레기통 설정 간격 (memcached 클래스)
mfsmakesnapshot: 스냅샷
기다리다
mfsgetgoal:
[root@MfsMount-200 www]# touch good
[root@MfsMount-200 www]# ll
total 0
-rw-r--r-- 1 502 502 0 Nov 5 01:03 good
[root@MfsMount-200 www]# ln /usr/local/mfs/bin/mfs
mfsappendchunks mfsfileinfo mfsgettrashtime mfsrgettrashtime mfssetgoal
mfscheckfile mfsfilerepair mfsmakesnapshot mfsrsetgoal mfssettrashtime
mfsdeleattr mfsgeteattr mfsmount mfsrsettrashtime mfssnapshot
mfsdirinfo mfsgetgoal mfsrgetgoal mfsseteattr mfstools
[root@MfsMount-200 www]# ln /usr/local/mfs/bin/mfs* /usr/local/bin
[root@MfsMount-200 www]# mfsget
mfsgeteattr mfsgetgoal mfsgettrashtime
[root@MfsMount-200 www]# mfsgetgoal
get objects goal (desired number of copies)
usage: mfsgetgoal [-nhHr] name [name ...]
-n - show numbers in plain format
-h - "human-readable" numbers using base 2 prefixes (IEC 60027)
-H - "human-readable" numbers using base 10 prefixes (SI)
-r - do it recursively
[root@MfsMount-200 www]# mfsgetgoal good
good: 1
[root@MfsMount-200 www]# dd if=/dev/zero of=bigfile.img bs=1M count=10000
10000+0 records in
10000+0 records out
10485760000 bytes (10 GB) copied, 209.794 s, 50.0 MB/s
술을 끓여 차를 음미하다: 흩어져 보관해야 한다.
[root@MfsMount-200 www]# mfsgetgoal /www/bigfile.img
/www/bigfile.img: 1
[root@MfsMount-200 www]# mfsfileinfo /www/bigfile.img
/www/bigfile.img:
chunk 0: 00000000000004F7_00000001 / (id:1271 ver:1)
copy 1: 192.168.0.200:9422
chunk 1: 00000000000004F8_00000001 / (id:1272 ver:1)
copy 1: 192.168.0.190:9422
chunk 2: 00000000000004F9_00000001 / (id:1273 ver:1)
copy 1: 192.168.0.200:9422
chunk 3: 00000000000004FA_00000001 / (id:1274 ver:1)
copy 1: 192.168.0.190:9422
chunk 4: 00000000000004FB_00000001 / (id:1275 ver:1)
copy 1: 192.168.0.200:9422
chunk 5: 00000000000004FC_00000001 / (id:1276 ver:1)
copy 1: 192.168.0.190:9422
chunk 6: 00000000000004FD_00000001 / (id:1277 ver:1)
copy 1: 192.168.0.200:9422
chunk 7: 00000000000004FE_00000001 / (id:1278 ver:1)
copy 1: 192.168.0.190:9422
chunk 8: 00000000000004FF_00000001 / (id:1279 ver:1)
...........
술을 끓여 차를 음미하다.
[root@MfsMount-200 www]# mfssetgoal 3/www/bigfile.img
/www/bigfile.img: 3
[root@MfsMount-200 www]# mfsgetgoal/www/bigfile.img
/www/bigfile.img: 3
술을 끓여 차를 음미하다: 그가 생성되기를 기다리고strace를 통해 줄곧 조각을 처리하고 있다.세 개의 chunks 사용률은 22 정도입니다.대기 중...
3분이 지난 후에 이 10G 파일은 조각으로 나뉘어 완성되었다. 세 개의 chunks 사용률은 28, 31, 30이다.그래서 겉으로는 파일이 보이지만 열리지 않는 것은 필름을 나누는 이유이고, 우리가 보는 것은 마스터에 표시된 정보일 뿐이다.
디렉터리 설정하기 (귀속 설정 -r)
[root@MfsMount-200 www]# mfssetgoal -r 4 testgoaltime/
testgoaltime/:
inodes with goal changed: 1
inodes with goal not changed: 0
inodes with permission denied: 0
[root@MfsMount-200 www]# touch goal4 testgoaltime/
[root@MfsMount-200 www]# ls testgoaltime/
[root@MfsMount-200 www]# ll
total 10240000
-rw-r--r-- 1 502 502 10485760000 Nov 5 01:08 bigfile.img
-rw-r--r-- 1 502 502 0 Nov 5 01:22 goal4
-rw-r--r-- 1 502 502 0 Nov 5 01:03 good
drwxr-xr-x 2 502 502 0 Nov 5 01:22 testgoaltime
[root@MfsMount-200 www]# touch testgoaltime/goal4.1
[root@MfsMount-200 www]# ll testgoaltime/
total 0
-rw-r--r-- 1 502 502 0 Nov 5 01:23 goal4.1
[root@MfsMount-200 www]# mfsgetgoal testgoaltime/goal4.1
testgoaltime/goal4.1: 4
mfscheckfile
[root@MfsMount-200 www]# mfscheckfile bigfile.img
bigfile.img:
chunks with 2 copies: 157
[root@MfsMount-200 www]# mfscheckfile good
good:
[root@MfsMount-200 www]# echo "1" >good
[root@MfsMount-200 www]# mfscheckfile good
good:
chunks with 1 copy: 1
mfsfileinfo: (빈 파일이 표시되지 않습니다. 여기는 chunks 디렉터리에 있는 파일입니다.)
[root@MfsMount-200 www]# mfsfileinfo testgoaltime/goal4.1
testgoaltime/goal4.1:
[root@MfsMount-200 www]# echo "111" testgoaltime/goal4.1
111 testgoaltime/goal4.1
[root@MfsMount-200 www]# mfsfileinfo testgoaltime/goal4.1
testgoaltime/goal4.1:
[root@MfsMount-200 www]# cat testgoaltime/goal4.1
[root@MfsMount-200 www]# echo "111" >testgoaltime/goal4.1
[root@MfsMount-200 www]#
[root@MfsMount-200 www]#
[root@MfsMount-200 www]#
[root@MfsMount-200 www]# mfsfileinfo testgoaltime/goal4.1
testgoaltime/goal4.1:
chunk 0: 0000000000000595_00000001 / (id:1429 ver:1)
copy 1: 192.168.0.190:9422
copy 2: 192.168.0.200:9422
mfsdirinfo:
[root@MfsMount-200 www]# mfsdirinfo good
good:
inodes: 1
directories: 0
files: 1
chunks: 1
length: 2
size: 70656
realsize: 70656
[root@MfsMount-200 www]# ls
bigfile.img goal4 good testgoaltime
[root@MfsMount-200 www]# mfsdirinfo testgoaltime
testgoaltime:
inodes: 2
directories: 1
files: 1
chunks: 1
length: 4
size: 70656
realsize: 282624
mfsgettrashtime: 쓰레기통
1. 삭제 파일은 휴지통 간격으로 찾을 수 있습니다.
2. 서류 제외
3. 마운트 중지
4, -m로 마운트
5,trash의 16진 이름 + 파일 이름을 찾습니다
6. undel 디렉터리로 이동
[root@MfsMount-200 www]# rm testgoaltime/goal4.1
[root@MfsMount-200 www]# rm -rf good
[root@MfsMount-200 www]# ps aux |grep mfsmount
root 6341 5.1 3.1 204960 60764 ? S<sl 00:59 2:07 /usr/local/mfs/bin/mfsmount
root 6602 0.0 0.0 4356 728 pts/2 S+ 01:40 0:00 grep mfsmount
[root@MfsMount-200 www]# kill 7341
-bash: kill: (7341) - No such process
[root@MfsMount-200 www]# kill 6341
[root@MfsMount-200 www]# ps aux |grep mfsmount
root 6605 0.0 0.0 4356 728 pts/2 S+ 01:41 0:00 grep mfsmount
[root@MfsMount-200 www]# /usr/local/mfs/bin/mfsmount -m
[root@MfsMount-200 www]# cd /www/
[root@MfsMount-200 www]# ls
reserved trash
[root@MfsMount-200 www]# ls reserved/
[root@MfsMount-200 www]# ls trash/
00000002|good 00000006|testgoaltime|goal4.1 undel
[root@MfsMount-200 www]# mv 0* undel
mv: cannot stat `0*': No such file or directory'`
[root@MfsMount-200 www]# mv 0* ^Cdel
[root@MfsMount-200 www]# cd trash/
[root@MfsMount-200 trash]# mv 0* undel
[root@MfsMount-200 www]# /usr/local/mfs/bin/mfsmount -s
mfsmaster accepted connection with parameters: read-write,restricted_ip ; root mapped to 502:502
fuse: mountpoint is not empty
fuse: if you are sure this is safe, use the 'nonempty' mount option
error in fuse_mount
[root@MfsMount-200 www]# /usr/local/mfs/bin/mfsmount -s
mfsmaster accepted connection with parameters: read-write,restricted_ip ; root mapped to 502:502
fuse: mountpoint is not empty
fuse: if you are sure this is safe, use the 'nonempty' mount option
error in fuse_mount
[root@MfsMount-200 www]# ps aux |grep mfs
mfs 6133 6.4 0.1 31336 3168 ? S<l 00:04 6:23 /usr/local/mfs/sbin/mfschunkserver start
mfs 6263 0.2 0.0 2484 968 ? S< 00:47 0:08 /usr/local/mfs/sbin/mfsmetalogger start
root 6607 0.0 0.2 49212 4976 ? S<sl 01:41 0:00 /usr/local/mfs/bin/mfsmount -m
root 6661 0.0 0.0 4356 744 pts/2 S+ 01:43 0:00 grep mfs
[root@MfsMount-200 www]# kill 6607
[root@MfsMount-200 www]# /usr/local/mfs/bin/mfsmount
mfsmaster accepted connection with parameters: read-write,restricted_ip ; root mapped to 502:502
[root@MfsMount-200 www]# ls /www/
bigfile.img goal4 good testgoaltime
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Qiita의 API를 부를 때 끝에 슬래시를 붙이면 http://~로 리디렉션되므로 조심합시다.제목대로. curl 결과는 . 예전에 보았던 오류에 근거한 박자를 만났습니다 이것은 메시지처럼 HTTP 통신을 시도할 때 iOS가 차단하는 사람입니다. URLSession 에 건네주고 있는 url는 확실히 https...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.