USB Disk Check at Boot or Hot Plug (improved version) - XIYO/asuswrt-merlin.ng-kr GitHub Wiki
λ°°κ²½
μ΄ κ°μ΄λλ μ¬κΈ°μμ μ°Ύμ μ μλ μλ³Έμ μ΄μ κ²μ
λλ€. μ΄ κ°μ΄λμ λͺ©μ μ λΆν
μ λλ USB μ μ₯ μ₯μΉκ° μ°κ²°λ λ νμΌ μμ€ν
μ μλμΌλ‘ μ κ²νκ³ λ³΅κ΅¬νκΈ° μν΄ μ¬μ©ν μ μλ pre-mount
μ€ν¬λ¦½νΈ μμλ₯Ό μ 곡νλ κ²μ
λλ€. μ΄λ λΌμ°ν°κ° νμΌ μμ€ν
μ μλμΌλ‘ λ§μ΄νΈν νμλ μ κ²μ μν΄ λ§μ΄νΈλ₯Ό ν΄μ νκΈ° μ΄λ €μΈ μ μκΈ° λλ¬Έμ λ°λμ§ν μ μμ΅λλ€. νΉν κ·Έ νμΌ μμ€ν
μ΄ Entwareμ κ°μ μ 3μ μννΈμ¨μ΄μ μν΄ μ¬μ©λλ κ²½μ°μλ λμ± κ·Έλ μ΅λλ€.
μ΄ μ€ν¬λ¦½νΈλ μλ³Έ μ€ν¬λ¦½νΈλ³΄λ€ λ€μκ³Ό κ°μ κ°μ μ¬νμ ν¬ν¨ν©λλ€:
- GPT λμ€ν¬μμ νΈνμ± (2TBλ³΄λ€ ν° λμ€ν¬λ GPTκ° νμν©λλ€).
- νμΌ μμ€ν μ νμ μ λ’°ν μ μλ νμ§.
- Merlinμ νμ¨μ΄μ Johnμ νμ¨μ΄ λͺ¨λμ νΈνλλ λμ€ν¬ μ κ² λͺ λ Ή.
- HFS νμΌ μμ€ν μ§μ.
- μ€μ νν°μ νμ§.
Merlinμ 384.11 λ° Johnμ V39E1 νμ¨μ΄ 릴리μ€λΆν° pre-mount
μ¬μ©μ μ€ν¬λ¦½νΈμ λ λ²μ§Έ λ§€κ°λ³μ($2
)κ° μ λ¬λ©λλ€. μ΄ λ§€κ°λ³μμλ λΌμ°ν°μ μν΄ νμ§λ νμΌ μμ€ν
μ νμ΄ ν¬ν¨λ©λλ€. μ΄λ MBR νν°μ
IDλ₯Ό μ¬μ©νλ μ΄μ λ°©λ²λ³΄λ€ ν¨μ¬ λ μ λ’°ν μ μμ΅λλ€. λ€μμ κ°λ₯ν λͺ¨λ νμΌ μμ€ν
μ νμ λͺ©λ‘μ
λλ€: NULL
, mbr
, swap
, ext2
, ext3
, ext4
, hfs
, hfs+j
, hfs+jx
, ntfs
, apple_efi
, vfat
, unknown
.
첫 λ²μ§Έ λ§€κ°λ³μ($1
)λ λ³κ²½λμ§ μμμΌλ©° μ₯μΉ μ΄λ¦(μ: /dev/sda1
λλ /dev/sda
)μ
λλ€. μ«μλ‘ λλμ§ μλ μ₯μΉ μ΄λ¦(μ: /dev/sda
)μ΄ μ ν¨νλ€λ μ μ μ μνμΈμ. μ΄λ μΌλ°μ μΌλ‘ μ₯μΉμ νν°μ
ν
μ΄λΈμ΄ μκ³ λ¨μΌ νμΌ μμ€ν
(μ¦, μνΌ νλ‘νΌ)μ ν¬ν¨νκ³ μμμ λνλ
λλ€. μ΄λ USB νλμ λλΌμ΄λΈμ κ°μ κ²½μ°μ μμ£Ό λ³Ό μ μμ΅λλ€.
νμ 쑰건
λ€μ νμ¨μ΄ λ²μ μ΄μμ΄ νμν©λλ€: Merlinμ 384.11 λλ Johnμ V39E1.
κ³ λ € μ¬ν
- κ°λ₯ν κ²½μ° μμ μ€ν¬λ¦½νΈλ νμΌ μμ€ν
μ "λΉ λ₯Έ" μ κ²μ μνν©λλ€. μ΄λ
pre-mount
κ° λΈλ‘νΉ μ€ν¬λ¦½νΈμ΄λ©° μ 체 νμΌ μμ€ν μ κ²μ μννλ©΄ λΆν μκ°μ μ μν₯μ λ―ΈμΉ μ μκΈ° λλ¬Έμ μΌλ°μ μΌλ‘ λ°λμ§ν©λλ€. - κΈ°λ³Έμ μΌλ‘ ext2, ext3, λλ ext4 νμΌ μμ€ν
μ λ§μ§λ§ μ κ² ν 20ν μ΄μ λ§μ΄νΈλμκ±°λ 6κ°μ μ΄μ μ§λ¬μ κ²½μ° "μ 체" μ κ²μ΄ κ°μ λ©λλ€. μ΄ νλμ
tune2fs
λͺ λ ΉμΌλ‘ λ³κ²½ν μ μμ΅λλ€. - λΌμ°ν°μ μΉUIμμ "λμ€ν¬ κ²μ¬" μ νΈλ¦¬ν°λ₯Ό μ¬μ©ν λ, κ²μ¬κ° μλ£λ ν μ₯μΉκ° λ€μ λ§μ΄νΈλμ΄
pre-mount
κ° λ€μ μ€νλ μ μμμ λͺ μ¬νμΈμ. μ΄λ μ₯μΉκ° λ λ² μ κ²λ μ μλ€λ κ²μ μλ―Έν©λλ€!
μμ μ€ν¬λ¦½νΈ
λ€μμ κ·Έλλ‘ μ¬μ©νκ±°λ μμ μ pre-mount
μ€ν¬λ¦½νΈλ₯Ό κΈ°λ°μΌλ‘ μ¬μ©ν μ μμ΅λλ€. μ¬μ©μ μ€ν¬λ¦½νΈλ₯Ό μμ±νκ±°λ νμ±ννλ λ°©λ²μ λν΄μλ μν€μ λ€λ₯Έ κ³³μμ μ€λͺ
λμ΄ μμΌλ―λ‘ μ¬κΈ°μλ μ€λͺ
νμ§ μκ² μ΅λλ€. μ΄ μμ λ€μ μλ λ°©μμ μ½κ² μ΄ν΄ν μ μλλ‘ μμ±λμμ΅λλ€. κ·Έλ€μ μλμ μΌλ‘ "μ리ν" (μ¦, λΉμ§κ΄μ μΈ) μ½λ© κΈ°λ²μ μ¬μ©νμ§ μμ΅λλ€.
κ°λ¨ν μ€ν¬λ¦½νΈ
μ΄ μ€ν¬λ¦½νΈλ ext2, ext3 λ° ext4 νμΌ μμ€ν λ§ μ κ²νλ©° λͺ¨λ μΆλ ₯μ λΌμ°ν°μ syslogλ‘ λ³΄λ λλ€.
#!/bin/sh
# $1=μ₯μΉ $2=νμΌ μμ€ν
μ ν
if [ "$2" = "ext2" ] || [ "$2" = "ext3" ] || [ "$2" = "ext4" ]; then
logger -t "pre-mount" "$1μμ νμΌ μμ€ν
μ κ² μ€"
e2fsck -p "$1" 2>&1 | logger -t "pre-mount"
fi
μ νμ μΈ μ€ν¬λ¦½νΈ
μ΄ μ€ν¬λ¦½νΈλ κ³ κΈ μ€ν¬λ¦½νΈμ κ°μνλ λ²μ μ΄λ©° λλΆλΆμ μ¬μ©μμκ² μ ν©ν κ²μ
λλ€. μ κ²μ μννλ λΆλΆλ§ ν¬ν¨λμ΄ μμ΅λλ€. ""
, mbr
, swap
, apple_efi
, unknown
μ νμ 무μλ©λλ€. HFS(μ¦, Apple) λμ€ν¬λ₯Ό μ¬μ©νμ§ μλ κ²½μ° ν΄λΉ μ½λ μΉμ
μ μ κ±°ν μλ μμ΅λλ€. μ 보 λ©μμ§λ λΌμ°ν°μ syslogλ‘ μ μ‘λμ§λ§ fsck λͺ
λ Ήμ μ€μ μΆλ ₯μ /var/log/fsck.log
λ‘ μ μ‘λ©λλ€.
#!/bin/sh
# $1=μ₯μΉ $2=νμΌ μμ€ν
μ ν
TZ=$(cat /etc/TZ); export TZ
TAG=$(basename "$0")
CHKLOG=/var/log/fsck.log
CHKCMD=""
case "$2" in
ext2|ext3|ext4)
CHKCMD="e2fsck -p" ;;
hfs|hfs+j|hfs+jx)
if [ -x /usr/sbin/chkhfs ]; then
CHKCMD="chkhfs -a -f"
elif [ -x /usr/sbin/fsck_hfs ]; then
CHKCMD="fsck_hfs -d -ay"
fi ;;
ntfs)
if [ -x /usr/sbin/chkntfs ]; then
CHKCMD="chkntfs -a -f"
elif [ -x /usr/sbin/ntfsck ]; then
CHKCMD="ntfsck -a"
fi ;;
vfat)
CHKCMD="fatfsck -a" ;;
esac
if [ -n "$CHKCMD" ]; then
logger -t "$TAG" "'$CHKCMD $1' μ€ν μ€ - μΆλ ₯μ $CHKLOGμμ νμΈ"
echo -e "\n'$(date)'μ '$CHKCMD $1' μμ" >> $CHKLOG
$CHKCMD "$1" >> $CHKLOG 2>&1
fi
κ³ κΈ μ€ν¬λ¦½νΈ
μ΄ μ€ν¬λ¦½νΈμλ κ°λ₯ν λͺ¨λ νμΌ μμ€ν
μ νμ λν μ½λ λΈλ‘μ΄ ν¬ν¨λμ΄ μμ΄, μΌλΆ λ λͺ
νν μ νμ μλ―Έλ₯Ό μ€λͺ
νλ λ° λμμ΄ λ©λλ€. μ€ν¬λ¦½νΈλ₯Ό λ κ΄λ¦¬νκΈ° μ½κ² μ μ§νκΈ° μν΄ κ΄μ¬μ΄ μλ μΉμ
μ μ κ±°νλ κ²μ΄ μ’μ΅λλ€. μ 보 λ©μμ§λ λΌμ°ν°μ syslogλ‘ μ μ‘λμ§λ§ fsck λͺ
λ Ήμ μ€μ μΆλ ₯μ /var/log/fsck.log
λ‘ μ μ‘λ©λλ€.
#!/bin/sh
# $1=μ₯μΉ $2=νμΌ μμ€ν
μ ν
TZ=$(cat /etc/TZ); export TZ
TAG=$(basename "$0")
CHKLOG=/var/log/fsck.log
CHKCMD=""
if [ $# -lt 2 ]; then
logger -t "$TAG" "λ§€κ°λ³μκ° λλ½λ¨. νμ¨μ΄κ° λ무 μ€λλ¨?"
exit 1
fi
case "$2" in
"")
logger -t "$TAG" "μ₯μΉ $1μ μ½λ μ€ μ€λ₯ λ°μ" ;;
mbr)
logger -t "$TAG" "MBR($1)μμ νν°μ
μ΄ λ°κ²¬λμ§ μμ" ;;
swap)
logger -t "$TAG" "$1μ μ€μ νν°μ
μ" ;;
ext2|ext3|ext4)
CHKCMD="e2fsck -p" ;;
hfs|hfs+j|hfs+jx)
if [ -x /usr/sbin/chkhfs ]; then
CHKCMD="chkhfs -a -f"
elif [ -x /usr/sbin/fsck_hfs ]; then
CHKCMD="fsck_hfs -d -ay"
fi ;;
ntfs)
if [ -x /usr/sbin/chkntfs ]; then
CHKCMD="chkntfs -a -f"
elif [ -x /usr/sbin/ntfsck ]; then
CHKCMD="ntfsck -a"
fi ;;
apple_efi)
logger -t "$TAG" "$1μ μ ν EFI μμ€ν
νν°μ
μ" ;;
vfat)
CHKCMD="fatfsck -a" ;;
unknown)
logger -t "$TAG" "$1μ μ μ μλ νμΌ μμ€ν
(μ: exFAT)μ κ°μ§κ³ μκ±°λ νν°μ
ν
μ΄λΈμ΄ μμ(μ: λΉ λ―Έλμ΄)" ;;
*)
logger -t "$TAG" "$1μ μμμΉ λͺ»ν νμΌ μμ€ν
μ ν $2" ;;
esac
if [ -n "$CHKCMD" ]; then
logger -t "$TAG" "'$CHKCMD $1' μ€ν μ€ - μΆλ ₯μ $CHKLOGμμ νμΈ"
echo -e "\n'$(date)'μ '$CHKCMD $1' μμ" >> $CHKLOG
$CHKCMD "$1" >> $CHKLOG 2>&1
fi
μ νμ μΈ μ€ν¬λ¦½νΈμ κ³ κΈ μ€ν¬λ¦½νΈλ λΌμ°ν°μ μ체 λ΄μ₯ λμ€ν¬ κ²μ¬ μ νΈλ¦¬ν° /usr/sbin/app_fsck.sh
μμ λ§μ λΆλΆμ μ°¨μ©νκ³ μμ΅λλ€. μ¬μ€, λΉμ μ κ·Έ μ€ν¬λ¦½νΈλ₯Ό pre-mount
μ κ°λ¨ν λνΌλ‘ μ¬μ©νλ κ²μ μν μλ μμ΅λλ€. κ·Έλ¬λ κ·Έ μ€ν¬λ¦½νΈμλ μΌλΆ μ νμ΄ μμΌλ©° "μ 체" μ κ²κ³Ό κ°μ΄ μνμ§ μλ μ΅μ
μ μ¬μ©ν μλ μμ΅λλ€.