요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
#! /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
# 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
}
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
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.
목적과 출력 설정
1-12이 스크립트는 AoE 저장장치에 관한 sysfs 정보를 모아 표시합니다. 더 완전한 구현은 `aoetools` 패키지의 `aoe-stat`입니다. `set -e`를 사용하므로 처리되지 않은 명령 오류가 발생하면 스크립트가 종료됩니다.
`format`은 폭 8자의 열 세 개와 줄바꿈으로 구성된 `printf` 형식입니다. `me`에는 실행 파일의 기본 이름을 저장하고, `sysd`에는 환경 변수 `sysfs_dir`가 있으면 그 값을, 없으면 `/sys`를 사용합니다. 장치·MAC·네트워크 인터페이스·상태를 출력하려던 네 열짜리 머리글 명령은 주석 처리되어 있으며 실제 출력은 장치, 인터페이스, 상태의 세 열입니다.
스크립트가 출력과 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-20SUSE 9.1 Pro가 `/etc/mtab`에 `/sys`를 기록하지 않는다는 이유로 `mount | grep sysfs` 검사 코드는 주석 처리되어 있습니다. 실제 검사는 `$sysd/block` 디렉터리의 존재 여부입니다. 디렉터리가 없으면 표준 오류에 sysfs가 마운트되지 않았다는 메시지를 쓰고 종료 상태 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`로 정렬됩니다.
파티션을 제외한 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
요약·해설
status.sh:1-30sysfs에서 AoE `etherd` 장치의 이름, 네트워크 인터페이스와 상태를 수집해 정렬하여 보여 줍니다.