"Załóżmy, masz trzy dyski twarde o wielkościach: 80, 40 i 60 GB. I 150 GB plików muzycznych, które należy przechowywać na tych dyskach. Jak to zrobić?
Znane mi były dwa rozwiązania:
- trzy oddzielne katalogi "Muzyka", po jednym na każdym systemie plików
- utworzyć pewnego rodzaju RAID, łącząc wszystkie dyski w macierz.
Pierwszy metoda jest dosyć męcząca, po pierwsze musisz zdecydować w jaki sposób podzielisz dane między dyski i śledzić co jest gdzie przechowywane. Na przykład, możesz zdecydować się na przechowywanie całej kolekcji muzyki klasycznej na pierwszym dysku, a rocka trzymać na drugim. Wtedy może się okazać że na pierwszym brakuje Ci miejsca, a na drugim masz go w nadmiarze. Co wtedy? Linki symboliczne?
Metoda z RAIDem jest wygodniejszym rozwiązaniem ale zawsze ponosisz jakąś stratę (zawodność, mniej miejsca na dysku).
Niedawno znalazłem lepsze rozwiązanie tego problemu: mhddfs. Jest to moduł FUSE, który pozwala łączyć kilka mniejszych plików w jeden wielki, wirtualny, który będzie zawierał wszystkie pliki ze wszystkich partycji. Nawet lepiej, w odróżnieniu od innych podobnych modułów (unionfs?), ten nie ogranicza możliwości dodawania nowych plików do połączonych plików i inteligentnie zarządza tym gdzie te pliki zostaną umieszczone."
Czytaj więcej..
Skopiuj ten skrypt do jakiegoś katalogu, nadaj mu prawo do wykonywania i uruchom. Wymagany jest checkinstall i unzip, ponadto skrypt musi nazywać się "w32codecs-all.b4d". Instalacja odbywa się poprzez dpkg..
#!/bin/bash
# Sample and simple build4deborah
# 3ED 2008 GPL3
pkgname=w32codecs-all
_pkgname=windows-all
pkgver=20071007
pkgrel=1
arch=i386
license=nonfree
source=("ftp://ftp1.mplayerhq.hu/MPlayer/releases/codecs/windows-all-$pkgver.zip")
group=checkinstall
maintainer=aftomat
#deps=not_in_checkinstall
if [ "$1" = "chkinst" ]; then
#---------INSTALL--------#
# only instalation command
mkdir -p /usr/lib/win32/
mv Readme.txt doc-pak/
cp -r * /usr/lib/win32/
#----------END-----------#
else
for i in ${source[@]}; do wget -c "$i"; done
#---------PREPARE--------#
# 1. uncompress, get in..
# 2. configure, build
unzip $_pkgname-$pkgver.zip
cd $_pkgname-$pkgver/
#----------END-----------#
checkinstall --pkgname=$pkgname --pkgversion=$pkgver --pkgarch=$arch --pkgrelease=$pkgrel --pkglicense=$license --pkggroup=$group --pkgsource=${source[0]} --maintainer=$maintainer -y $PWD/../$pkgname.b4d chkinst
fi
Nota 1: Plik ten można przerobić tak by tworzył pakiet do "czego innego TM".
Nota 2: Proste aż miłe.. Kto zna tak samo prosty odpowiednik dla debiana? ;p
Nota 3: Gdybyś tworzył w oparciu o to i nie chciałbyś ustawiać wszystkich zmiennych: ${parametr:-słowo} (patrz man bash)..
Po raz kolejny wystukałem jakiś skrypt w wolnej chwili i postanowiłem się podzielić. Tym razem będzie to ładny i czytelny rc.local dla dystrybucji posiadających init Debiana. Gdy ktoś tam wrzuci więcej niż kilka poleceń to robi się nie tyle co bałagan, a raczej rewolucja, nieczytelne, brzydkie i co tam jeszcze może przyjść na myśl. Postanowiłem wyjść temu na przeciw i w pare chwilek napisałem sobie coś takiego:
#!/bin/sh -e
#
# rc.local
#
err_stat() {
typeset -i stat="$1"
echo -e "\033[0;41;37;1m \`--> Failed (#$stat).\033[0m"
unset stat
}
rc_exec() {
echo -e "\033[0;32;1m \`--> \033[0;1mStarting:\033[0m $1"
if [ -z "$2" ]; then
$1 || err_stat $?
else
$2 || err_stat $?
fi
}
echo -e "\033[0;32;1m::\033[0;1m Starting local script..\033[0m"
#--------Configuration Start Here--------#
rc_exec "Tytuł, to wywoła się z błędem" "polecenie-hshfsfshkfhsd"
rc_exec "echo polecenie, a to juz nie"
#---------Configuration End Here---------#
unset err_stat rc_exec; exit 0