AIF (Arch Installation Framework)를 사용하여 사용자 지정 자동 설치를 작성 중이며 파티션이 지정된 파티션에서 파일 시스템을 찾아야합니다.
지금까지 나는 이것을 가지고있다 :
grok_partitions () {
local partitions=
for label in `ls /dev/disk/by-label | grep "Arch"`
do
if [ $label == "Arch" ]
then
mount_point="/"
else
IFS="-" read base mount <<< "${label}"
mount_point="/${mount}"
fi
local partition=$(readlink -f /dev/disk/by-label/${label})
local part_no=$(echo ${partition} | grep -Po '\d+')
local fs=$(parted -mls | grep "^${part_no}" | cut -d: -f5)
partitions+="${partition} raw ${label} ${fs};yes;${mount_point};target;no_opts;${label};no_params\n"
done
# do the swap
if [ -e /dev/disk/by-label/swap ]
then
local partition=$(readlink -f /dev/disk/by-label/swap)
partitions+="$partition raw swap swap;yes;no_mountpoint;target;no_opts;swap;no_params"
else
# if there's no labeled swap, use the first one we find
local partition=$(fdisk -l | grep -m1 swap | awk '{ print $1 }')
if [ ! -e $partition ]
then
echo "No swap detected. Giving up."
exit 1
fi
partitions+="$partition raw no_label swap;yes;no_mountpoint;target;no_opts;no_label;no_params"
fi
echo -n ${partitions}
}
이것은 하드 드라이브가 하나 뿐인 내 컴퓨터에서는 제대로 작동했지만 LiveCD에서 실행중인 VM에서 실행할 때 (분명히) 실패했습니다 (LiveCD는 다른 드라이브 / dev / sr0로 선택되었습니다).
나는 시도 할 수있는 몇 가지 해킹을 생각했다.
mount $partition; grep $partition /etc/mtab | awk ...
- 을 사용
parted -mls
하지만 영리한 스크립팅으로 관심있는 파티션을 가져온 다음 이미 scriptt에서와 같이 구문 분석하십시오.
더 좋고 간단한 방법이 있습니까? 이미 관심있는 파티션이 있으며 파일 시스템 (및 사용 가능한 스왑 찾기) 만 찾으면됩니다.
답변
나는 대답을 찾았다 고 생각한다. blkid
매뉴얼 페이지에서 :
blkid 프로그램은 libblkid (3) 라이브러리 작업을위한 명령 줄 인터페이스입니다. 블록 디바이스가 보유하는 컨텐츠 유형 (예 : 파일 시스템 또는 스왑)과 컨텐츠 메타 데이터 (예 : LABEL 또는 UUID 필드)에서 속성 (토큰, NAME = 값 쌍)을 판별 할 수 있습니다.
분명히 파일 시스템 유형과 함께 장치 이름을 인쇄합니다 (다른 유용한 정보와 함께). 해당 유형의 모든 장치 목록을 얻으려면
blkid | sed 's!\(.*\):.*TYPE="\(.*\)".*!\1: \2!'
모든 /dev/sd*/
장치 를 찾으려면 grep을 추가하십시오.
blkid | grep "/dev/sd.*" | sed 's!\(.*\):.*TYPE="\(.*\)".*!\1: \2!'
그런 다음 cut
또는 awk
필요한 것을 얻으십시오.
답변
file -s /path/to/device
디스크 / 파티션 / 슬라이스에서 파일 시스템을 식별합니다.
류 풍의:
[root@node2 ~]# file -s /dev/mapper/VolGroup00-LogVol00
/dev/mapper/VolGroup00-LogVol00: Linux rev 1.0 ext3 filesystem data (needs journa recovery) (large files)
[root@node2 ~]# file -s /dev/mapper/coraid--pool-coraid--lv1
/dev/mapper/coraid--pool-coraid--lv1: Linux GFS2 Filesystem (blocksize 4096, lockproto lock_dlm)
[root@node2 ~]# file -s /dev/mapper/coraid--pool-coraid--lv2
/dev/mapper/coraid--pool-coraid--lv2: SGI XFS filesystem data (blksz 4096, inosz 256, v2 dirs)
적어도 리눅스에서는 그렇지 않습니다.
답변
블록 장치의 TYPE 태그 만 표시하고 해당 값만 출력하십시오.
blkid -s TYPE -o value "$device"
예:
$ blkid -s TYPE -o value /dev/mapper/vg_svelte-home
btrfs
답변
많은 파일 시스템에서 작동하고 구조가 손상된 파일 시스템에서도 작동하는 이점이있는 보조 옵션은 다음과 같습니다. testdisk
입니다. ( sudo apt install testdisk
설치하여 실행할 수 있습니다 .)
다음과 같이 파일 시스템 유형 만 리턴하도록 스크립트하십시오.
$ testdisk /list "$path_to_partition" | grep " P " | awk '{print $2}'