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(LiveCD가 다른 드라이브 /dev/sr0로 선택됨)에서 실행되는 가상 컴퓨터에서 실행하면 (분명히) 실패합니다.
나는 시도해 볼 몇 가지 트릭을 생각했습니다.
mount $partition; grep $partition /etc/mtab | awk ...
- 를 사용
parted -mls
하지만 영리한 스크립트를 통해 내가 관심 있는 파티션을 추출한 다음 스크립트에서 했던 것처럼 구문 분석합니다.
이 작업을 수행하는 더 좋고 쉬운 방법이 있습니까? 관심 있는 파티션이 이미 있으므로 해당 파일 시스템을 찾고 사용 가능한 스왑을 찾으면 됩니다.
답변1
나는 답을 찾은 것 같아요: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
답변2
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)
적어도 리눅스에서는요.
답변3
블록 장치의 TYPE 태그만 표시하고 해당 값만 출력합니다.
blkid -s TYPE -o value "$device"
예:
$ blkid -s TYPE -o value /dev/mapper/vg_svelte-home
btrfs
답변4
많은 파일 시스템에서 사용할 수 있고 구조적으로 손상된 파일 시스템에서도 작동할 수 있다는 장점이 있는 두 번째 옵션은 입니다 testdisk
. ( sudo apt install testdisk
Debian 기반 시스템에서 이 설치를 실행할 수 있습니다.)
다음과 같이 파일 시스템 유형만 반환하는 스크립트를 작성하세요.
$ testdisk /list "$path_to_partition" | awk '$1 == "P" {print $2}'