← Documents Documentation/admin-guide/aoe/status.sh GitHub 원문 ↗

Linux 6.18.37 · Admin guide

AoE sysfs 상태 표시 스크립트

sysfs에서 AoE `etherd` 장치의 이름, 네트워크 인터페이스와 상태를 수집해 정렬하여 보여 줍니다.

Source pathDocumentation/admin-guide/aoe/status.sh
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약·해설

status.sh:1-30

sysfs에서 AoE `etherd` 장치의 이름, 네트워크 인터페이스와 상태를 수집해 정렬하여 보여 줍니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 #! /bin/sh
2 # collate and present sysfs information about AoE storage
3 #
4 # A more complete version of this script is aoe-stat, in the
5 # aoetools.
6
7 set -e
8 format="%8s\t%8s\t%8s\n"
9 me=`basename $0`
10 sysd=${sysfs_dir:-/sys}
11
12 # printf "$format" device mac netif state
13
14 # Suse 9.1 Pro doesn't put /sys in /etc/mtab
15 #test -z "`mount | grep sysfs`" && {
16 test ! -d "$sysd/block" && {
17 echo "$me Error: sysfs is not mounted" 1>&2
18 exit 1
19 }
20
21 for d in `ls -d $sysd/block/etherd* 2>/dev/null | grep -v p` end; do
22 # maybe ls comes up empty, so we use "end"
23 test $d = end && continue
24
25 dev=`echo "$d" | sed 's/.*!//'`
26 printf "$format" \
27 "$dev" \
28 "`cat \"$d/netif\"`" \
29 "`cat \"$d/state\"`"
30 done | sort
31

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

목적과 출력 설정

1-12

이 스크립트는 AoE 저장장치에 관한 sysfs 정보를 모아 표시합니다. 더 완전한 구현은 `aoetools` 패키지의 `aoe-stat`입니다. `set -e`를 사용하므로 처리되지 않은 명령 오류가 발생하면 스크립트가 종료됩니다.

`format`은 폭 8자의 열 세 개와 줄바꿈으로 구성된 `printf` 형식입니다. `me`에는 실행 파일의 기본 이름을 저장하고, `sysd`에는 환경 변수 `sysfs_dir`가 있으면 그 값을, 없으면 `/sys`를 사용합니다. 장치·MAC·네트워크 인터페이스·상태를 출력하려던 네 열짜리 머리글 명령은 주석 처리되어 있으며 실제 출력은 장치, 인터페이스, 상태의 세 열입니다.

초기 변수
변수의미
format%8s\t%8s\t%8s\n폭 8의 세 열
mebasename $0오류 메시지에 쓸 스크립트 이름
sysd${sysfs_dir:-/sys}환경 지정값 또는 /sys

스크립트가 출력과 sysfs 기준 경로를 준비하는 방법입니다.

#! /bin/sh
# collate and present sysfs information about AoE storage
#
# A more complete version of this script is aoe-stat, in the
# aoetools.

set -e
format="%8s\t%8s\t%8s\n"
me=`basename $0`
sysd=${sysfs_dir:-/sys}

# printf "$format" device mac netif state

sysfs 사용 가능 여부 검사

13-20

SUSE 9.1 Pro가 `/etc/mtab`에 `/sys`를 기록하지 않는다는 이유로 `mount | grep sysfs` 검사 코드는 주석 처리되어 있습니다. 실제 검사는 `$sysd/block` 디렉터리의 존재 여부입니다. 디렉터리가 없으면 표준 오류에 sysfs가 마운트되지 않았다는 메시지를 쓰고 종료 상태 1로 끝냅니다.

sysfs 검사
sysd 결정$sysd/block 검사디렉터리 존재AoE 장치 순회
디렉터리 없음sysfs is not mountedexit 1

마운트 목록 대신 실제 block 디렉터리의 존재를 확인합니다.


# Suse 9.1 Pro doesn't put /sys in /etc/mtab
#test -z "`mount | grep sysfs`" && {
test ! -d "$sysd/block" && {
        echo "$me Error: sysfs is not mounted" 1>&2
        exit 1
}

AoE 장치 수집과 정렬

21-30

루프는 `$sysd/block/etherd*` 경로를 나열하고 `grep -v p`로 이름에 `p`가 든 항목, 즉 파티션 항목을 제외합니다. 검색 결과가 비어도 루프가 한 번은 안전하게 돌도록 끝에 센티널 값 `end`를 추가하며, 현재 값이 `end`이면 곧바로 다음 반복으로 넘어갑니다.

각 장치 경로에서 마지막 `!` 앞부분을 `sed`로 제거해 `dev` 이름을 얻습니다. 이어 장치 이름, `$d/netif`의 네트워크 인터페이스, `$d/state`의 상태를 세 열 형식으로 출력합니다. 전체 루프의 출력은 마지막에 `sort`로 정렬됩니다.

AoE 상태 수집
$sysd/block/etherd* 나열이름에 p가 든 항목 제외end 센티널 건너뜀장치 이름 추출netif 읽기state 읽기printfsort

파티션을 제외한 etherd 장치마다 세 필드를 읽고 최종 출력 전체를 정렬합니다.

for d in `ls -d $sysd/block/etherd* 2>/dev/null | grep -v p` end; do
        # maybe ls comes up empty, so we use "end"
        test $d = end && continue

        dev=`echo "$d" | sed 's/.*!//'`
        printf "$format" \
                "$dev" \
                "`cat \"$d/netif\"`" \
                "`cat \"$d/state\"`"
done | sort