
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
하고 영리한 스크립팅을 사용하여 관심 있는 파티션을 꺼낸 다음 스크립트에서 이미 수행한 대로 구문 분석합니다.
이 작업을 수행하는 더 좋고 간단한 방법이 있습니까? 관심 있는 파티션이 이미 있으므로 해당 파일 시스템(및 사용 가능한 스왑)만 찾으면 됩니다.
답변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)
적어도 Linux에서는 그렇습니다.
답변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}'