Tartalom
Bevezető
Előfordulhat, hogy egy webszerver működtetése során elfogy a tárhely a fő partíción, amelyiken a weboldalakat tároljuk. Ez igen kellemetlen tud lenni, mert ilyenkor a legjobb esetben is minimum az összes weboldalt át kell költöztetni egy másik meghajtóra, amit újonnan csatoltunk a rendszerbe. Ez időigényes, így több leállással jár mire mindent átmásolunk az új partícióra. Rosszabb esetben pedig telepíthetjük újra az egész rendszert az új merevlemezre.
Ebben a leírásban láthatunk egy praktikusabb megoldást, a bind mount módszert, aminek a segítségével akár egy weboldalt is külön átköltöztethetünk leállás nélkül, érintetlenül hagyva a többit. Továbbá kihasználjuk az eredeti partíciót is, mivel nem másolunk át mindent az újra. Így optimálisan gazdálkodhatunk az összes tárhelyünkkel. A módszer többféle helyzetben is alkalmazható, például:
- VirtualBox gépünket bővítjük egy újabb virtuális merevlemezzel
- Éles használatú szerverünket bővítjük új merevlemezzel
- Nem bővítjük a gépet semmilyen újabb diszkekkel, hanem csak használatba szeretnénk venni a gépben már meglévő másik partíciókat, amiken több szabad hely van
- Egy meglévő weboldalt szeretnénk különválasztani a többitől, aminek nagyobb tárhely igénye van
- Egy új weboldalt kellene átvennünk szerverünkre, de annak már nincs elegendő tárhely az alapstruktúrában
Bármelyik helyzetbe is kerültünk ez a megoldás segít megoldani a problémát. Ebben a példában én az ISPConfig-os tökéletes szerverkörnyezetben mutatom be a harmadik esettel, amikor a rendszer már tartalmazza a szükséges nagyobb partíciót, és arra szeretnénk áttenni egy webtárhelyet. Ettől függetlenül bármilyen webszerver konfiguráció esetén működik (pl. LAMP szerverek), csak ez így életszerűbb, mivel én már ugyanígy különválasztottam egy weboldalt a szerveremen, tehát a saját bevált tapasztalataimat írom le éles használat esetére.
Webtárhely áthelyezése
Tételezzük fel, hogy a /var könyvtárstruktúra és a /home könyvtárstruktúra külön partíción vannak. Az elsőben tárolódnak az ISPConfig által kezelt weboldalak fájlstruktúrái, míg a /home könyvtárstruktúra egy különálló partíción van, ahol még sok szabad hely van.
Legyen az átköltöztetni kívánt weboldalunk neve example.com, aminek a dokumentum gyökér elérése a szerveren pedig:
/var/www/clients/client1/web1/
Ez a könyvtár tehát a weboldal dokumentum könyvtára, ami többek között tartalmazza a chroot-hoz szükséges könyvtárstruktúrát, valamint ezen belül van a "web/" alkönyvtár is, ami pedig a weboldal gyökér könyvtára.
Ebben a példában fogjuk áthelyezni a webgyökér könyvtárat (/var/www/clients/client1/web1/web/) a /home struktúrába. Magát az egyel kijjebb lévő dokumentum gyökeret nem mozgatjuk, mert az a szerverkörnyezet része, és nem is foglal sok helyet, tehát csak a weboldal gyökérkönyvtárát irányítjuk át a másik partícióra.
Célterület kialakítása
Lépjünk be root-ként, majd alakítsuk ki a weboldal számára szükséges helyet a /home könyvtár alatt:
cd /home
mkdir example.com
Adjuk át a könyvtárat az ISPConfig-os felhasználónak:
chown web1:client1 /home/example.com
Tartalom másolása
Ezután átmásoljuk magát a weboldalt ebbe az új könyvtárba. Ha éppen új weboldalt hozunk létre és még nincs tartalom a webgyökérben, akkor is hajtsuk végre a másolást, mert az ISPConfig a webtárhely létrehozásakor létrehoz néhány alkönyvtárat, pl stats/, cgi-bin/, stb. így ezeket is pontosan át kell másolni, hogy megfelelően működjön a rendszer. Ha viszont már van tartalom a webgyökérben, tehát működő weboldalról van szó, akkor annak a tartalmát majd törölni kell, hogy ne foglalja a régi partíción is a helyet.
Hajtsuk végre a másolást, majd állítsuk át a fájlstruktúrát a weboldal felhasználójára:
cp -r /var/www/clients/client1/web1/web /home/example.com/www
chown -R web1:client1 /home/example.com/www
Itt tehát rekurzívan átmásolunk mindent a webgyökérből, beleértve a rejtett fájlokat is.
Bind mount beállítása az fstab fájlban
Ezután nyissuk meg a /etc/fstab fájlt szerkesztésre:
nano /etc/fstab
És adjuk hozzá a következő sort, majd mentsük le (ekkor még nem lép érvénybe):
/home/example.com/www /var/www/clients/client1/web1/web none bind,nobootwait,_netdev 0 0
(Az fstab fájlban történő mountolás perzisztens marad, tehát a rendszer újraindítása után ismét végrehajtódik a csatolás.)
- /home/example.com/www: Fájlrendszer, ennek a helyén kell megadni az új partíción lévő elérési utat, ahova másolásra került a weboldal
- /var/www/clients/client1/web1/web: Csatolási pont, ennek a helyére pedig jön a weboldal eredeti webgyökér könyvtára, ahova csatolásra fog kerülni az előző elérési út fizikai tartalma.
Így végig elérhető maradt az oldal, amíg eljutottunk idáig.
Eredeti webtartalom törlése
A mountolás után már nem lesz hozzáférhető az eredeti webgyökér könyvtár tartalma, mivel rácsatolódik a megadott könyvtár, tehát most jöhet az eredeti tartalom törlése (a web könyvtár marad, csak a benne lévő tartalom kerül törlésre):
rm -rf /var/www/clients/client1/web1/web/{*,.*}
Célszerű ellenőrizni, hogy valóban mindent töröltünk a könyvtárból, mert később nem fog kiderülni hogy valami itt foglalja a helyet.
Mount végrehajtása
Ezután hajtsuk végre a mount parancsot a -a kapcsolójával:
mount -a
Ha mindent jól csináltunk, akkor sikeres mountolás esetén egyből el is érhető a webről az új (fizikai) helyéről az oldal, és még csak az Apache-ot sem kellett újraindítani hozzá. Így az összes többi weboldal működése zavartalan maradt a szerveren és az áthelyezett weboldal is csak arra a pár másodpercre esett ki, amíg végrehajtottuk a törlést és utána kiadtuk a mount parancsot.
Bind mount megszűntetése szükség esetén
Ha valami okból később meg szeretnénk szűntetni a csatolást (pl hozzá kell férni az eredeti webgyökérhez vagy oldal visszaköltöztetés, stb), akkor ezt a következő paranccsal tehetjük meg rootként a rendszer újraindítása nélkül:
umount /var/www/clients/client1/web1/web
Majd töröljük a /etc/fstab fájlból a hozzáadott sort is.
Konklúzió
A bind mount módszerrel tehát külön-külön bármelyik weboldal menet közben átköltöztethető a szerveren egy másik partícióra vagy új merevlemezre, hogyha kevés a webtárhely. Mint láthattuk, a művelet újraindítást nem igényel és leállással sem jár, így a gyakorlatban bármikor alkalmazható éles webszerververen is anélkül, hogy megzavartuk volna a többi weboldal működését.
- A hozzászóláshoz regisztráció és bejelentkezés szükséges
- 250 megtekintés