Archiwa tagu: bash

Wymiana dysku RAID 1

Założenia

Załóżmy że dysk w macierzy RAID już mamy wymieniony na nowy, chociaż przed wymianą wypadałoby odpiąć stary – ale o tym innym razem.

Dysk nowy / pusty -> /dev/sdb,

Dysk istniejący -> /dev/sda

Kopiowanie partycji

Na początku trzeba skopiować partycje. Jeśli nie wiemy jaką tablicę partycji posiadamy możemy użyć sfdisk -l. Jeśli rzuci błędem:

WARNING: GPT (GUID Partition Table) detected on '/dev/sda'! The util sfdisk doesn't support GPT. Use GNU Parted.

to znaczy że używamy GPT.

Tablica GPT

Dla tablicy GPT (czyli wszystko powyżej 2TB) należy użyć:

sgdisk -R=/dev/sdb /dev/sda

Spowoduje to skopiowanie partycji, następnie:

sgdisk -G /dev/sdb

aby zmienić identyfikatory GUID partycji, ponieważ powinny być jednoznaczne, a poprzednie polecenie skopiowało nam kompletną tablicę z wszystkimi identyfikatorami.

Tablica MBR

Dla MBR potrzebny jest następujący zestaw:

sfdisk -d /dev/sda | sfdisk /dev/sdb

oraz opcjonalnie:

sfdisk -R /dev/sdb

jeśli system nie wczytał automatycznie tablicy partycji na nowym dysku.

GRUB

Następnie wypada zainstalować gruba na nowym dysku:

grub-install /dev/sdb

Podpinanie partycji do macierzy

Najpierw sprawdzimy listę partycji, wywołując:

cat /proc/mdstat

Powinniśmy zobaczyć coś podobnego:

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md1 : active raid1 sda2[2] 
 523968 blocks super 1.2 [2/1] [U_]
 
md0 : active raid1 sda1[2] 
 16768896 blocks super 1.2 [2/1] [U_]

....

Następnie dla każdej z partycji wykonujemy:

mdadm /dev/md1 -a /dev/sdb2

podmieniając nr partycji / urządzeń wyczytane z wyników cat /proc/mdstat.

Po wykonaniu powyższego cat /proc/mdstat powinien dać podobny wynik:

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md1 : active raid1 sda2[2] sdb2[1]
 523968 blocks super 1.2 [2/2] [UU]
 
md0 : active raid1 sda1[2] sdb1[1]
 16768896 blocks super 1.2 [2/2] [UU]
 
md3 : active raid1 sda4[2] sdb4[1]
 2879277312 blocks super 1.2 [2/1] [_U]
 [>....................] recovery = 4.2% (121450880/2879277312) finish=413.1min speed=111251K/sec
 
md2 : active raid1 sda3[2] sdb3[1]
 33537920 blocks super 1.2 [2/1] [_U]
 resync=DELAYED
 
unused devices: <none>

Oznacza to że poszczególne partycje są synchronizowane. Polecenie pokazuje też szacowany czas potrzebny na synchronizację poszczególnych partycji. Jest on oczywiście ściśle uzależniony od wielkości partycji i aktualnego obciążenia systemu.

 

Migracja / synchronizacja plików

Migrację / synchronizację plików pomiędzy serwerami można wykonać za pomocą rsync. Wywołanie:

rsync -a --info=progress2 -e ssh <użytkownik>@<zdalny serwer>:<zdalny katalog> <lokalny katalog>

spowoduje skopiowanie wszystkich plików z zdalnego katalogu na zdalnym serwerze do lokalnego katalogu. Dodanie opcji –delete spowoduje usunięcie plików które nie istnieją na zdalnym serwerze.

Migracja poczty e-mail

Aby zmigrować wiadomości e-mail potrzebujemy imapsync oraz dostęp do obu skrzynek za pomocą protokołu IMAP

Przykładowa komenda:

imapsync --host1 <host źródłowy> --user1 <email źródłowy> --passfile1 <nazwa pliku z hasłem> --host2 <host docelowy> --user2 <email docelowy --passfile2 <nazwa pliku z hasłem do skrzynki docelowej>

Hasła przechowywane są w plikach aby uniknąć wpisywania ich bezpośrednio do wywołania (pojawiałby się później w historii)

Immutable

Nie możesz zmodyfikować plików / katalogów mimo odpowiednich uprawnień? Prawdopodobnie dany obiekt ma ustawioną flagę immutable. Możesz ją usunąć za pomocą:

chattr -i <katalog/plik>

oraz dodać za pomocą:

chattr +i <katalogplik>

Flagę immutable może ustawiać tylko root lub proces z odpowiednimi uprawnieniami.

Konwersja plików wideo .flv do .mp4 i do mp3

Czas na html5 video. Aby skonwertować wszystkie pliki wideo w formacie flash do mp4 w danym katalogu potrzebujemy avconv oraz find.

find . -type f -name '*.flv' -exec bash -c 'avconv -i "$0" -strict experimental "${0/%flv/mp4}"' {} \;

Find tutaj wyszukuje wszystkie pliki .flv w katalogu i podkatalogach, następnie na każdym z nich wykonywane jest polecenie avconv konwertujące obraz do h264 oraz dźwięk do aac.

Wyrażenie regularne podmienia ostatnie wystąpienie flv w nazwie pliku na mp4.

W przypadku konwersji do mp3 (czyli pobrania samego audio) potrzebna będzie następująca komenda:

find . -type f -name '*.flv' -exec bash -c 'avconv -i "$0" -vn -c:a libmp3lame -q:a 2 "${0/%flv/mp3}"' {} \;

LXC czyli wirtualne kontenery

Podstawowe komendy:

lxc-ls --fancy -> lista wszystkich kontenerów wraz z podstawowymi informacjami
lxc-info -n <nazwa kontenera> -> status wybranego kontenera z podstawowymi informacjami
lxc-cgroups -> ustawianie / wyświetlanie ograniczeń danego kontenera
lxc-console -n <nazwa kontenera> -> logowanie się na wirtualny serwer

Konfiguracja:

Plik konfiguracyjny można znaleźć w /var/lib/lxc/<nazwa kontenera>/config

Usuwanie starych plików

ionice -c 3 nice -n 20 find <katalog> -mtime +<dni> -type f -delete

katalog – ścieżka do katalogu w którym wyszukiwać
dni – liczba dni jaka upłynęła od czasu ostatniej modyfikacji

Polecenie usuwa wszystkie pliki (bez katalogów) starsze niż określona liczba dni.

Razem z nice powoduje, że „da się” korzystać z serwera w czasie przeszukiwania dużych katalogów, ionice ustala priorytet dla operacji we/wy, -c 3 -> trzecia, najniższa klasa procesów

Kopia wszystkich baz danych na serwerze

Skrypt bash do zrobienia kopii wszystkich baz danych na serwerze, każdej w osobnym pliku.

#! /bin/bash

TIMESTAMP=$(date +"%F")
BACKUP_DIR="<ścieżka do katalogu backupów>/$TIMESTAMP"
MYSQL_USER="root"
MYSQL=/usr/bin/mysql
MYSQL_PASSWORD="<hasło>"
MYSQLDUMP=/usr/bin/mysqldump

mkdir -p "$BACKUP_DIR/mysql"

databases=`$MYSQL --user=$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema)"`

for db in $databases; do
  $MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip > "$BACKUP_DIR/mysql/$db.gz"
done