Dieses Mal gab es ein Problem, dass die Kapazität des von uns verwalteten lokalen Servers knapp war. Auf dem betreffenden Server war CentOS 7 vorinstalliert und funktionierte unverändert. Die Speicherkonfiguration dieses Servers lautet
Es ist geworden. In den vorinstallierten Einstellungen
--Mountpunkt /
auf / dev / sda1 (50 GB)
--Mountpunkt / home
auf / dev / sdb1 (6 TB)
Dann wurden / var
und / opt
, die DB usw. enthalten, allmählich fett und machten / dev / sda1
dicht, und es trat ein Serverfehler auf.
Außerdem enthält / home
die Quelle der Webseite und personenbezogene Daten, wird jedoch höchstens 1 TB verwendet, sodass es unwahrscheinlich ist, dass dies schnell zunimmt.
Also habe ich beschlossen, / var
, / opt
von / dev / sda
nach / dev / sdb
zu verschieben.
Zu jener Zeit
/ dev / sdb1
auf 3 TB/ dev / sdb2
und 2 TB von / dev / sdb3
/ var
, / opt
/ var
auf / dev / sdb3
und / opt
auf / dev / sdb2
Die Migration wird gemäß dem Verfahren durchgeführt. Außerdem ist / dev / sdb
im GPT-Format formatiert, um große Speicherkapazitäten zu verarbeiten. Das Verfahren kann geringfügig vom MBR-Format abweichen. Speziell
--Verwenden Sie "fdisk" anstelle von "gdisk"
Und so weiter.
Ich arbeite daran, den Einhängepunkt zu ändern, aber es scheint, dass die SELinux-Beschriftung zu diesem Zeitpunkt korrekt eingestellt sein muss. Bitte beachten Sie, dass ich mit SELinux nicht vertraut bin und dies in einer "Deaktivierungs" -Umgebung mache.
Verkleinern Sie zuerst die Partition / dev / sdb1
.
Hängen Sie zuerst / dev / sdb1
aus.
# umount /dev/sdb1
Ändern Sie als Nächstes die Größe des Dateisystems.
# e2fsck -f /dev/sdb1
# resize2fs /dev/sdb1 3000G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/sdb1 to 786432000 (4k) blocks.
resize2fs
ist ein Befehl zum Ändern der Größe des Dateisystems. Dieser Befehl funktioniert nicht auf Partitionen.
Dadurch werden die in der Partition verstreuten Daten defragmentiert und die Informationen im Superblock geändert. Dies wird einige Zeit dauern.
(Referenz: https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/storage_administration_guide/ext4grow)
Berechnen Sie hier, wie viele Bytes Kapazität Sie nach der Größenänderung aus der Größe des Ausgabeblocks haben. In diesem Beispiel ist 1 Block = 4 kB = 4096 B, also ist die Kapazität
786432000 * 4096 = 3,221,225,472,000 B
Es wird sein.
Dann verkleinern Sie die Partition. Stellen Sie sicher, dass / dev / sdb
nicht gemountet ist, und ändern Sie die Größe der Partition im interaktiven Modus parted
.
# parted /dev/sdb
(parted) unit b #Stellen Sie die Ausgabeeinheit auf Byte
(parted) p #Aktuelle Informationen ausgeben
Model: ASR8405 RAID1-data (scsi)
Disk /dev/sdb: 5996837601280B
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1048576B 5996836552703B 5996835504128B ext4
Da der Anfang von / dev / sdb1
1048576 B ist, addieren Sie hier den Startversatz zu der zuvor angegebenen Größe (Byte), um die Endposition zu berechnen.
1,048,576 + 3,221,225,472,000 = 3,221,226,520,576 B
Dies ist eine Fortsetzung der "geteilten" Dialogkonsole.
(parted) resizepart
Partition number? 1
End? [5996836552192B]? 3221226520576B
Warning: Shrinking a partition can cause data loss, are you sure you want to continue?
Yes/No? Yes #Ich habe die Größe des Dateisystems bereits geändert, damit es in Ordnung ist
(parted) p
#Abkürzung
Disk Flags:
Number Start End Size File system Name Flags
1 1048576B 3221226521087B 3221225472512B ext4
(parted) q #Ich konnte bestätigen, dass die Größe korrekt geändert wurde, also habe ich die Trennung beendet
Jetzt können Sie sehen, dass / dev / sdb1
korrekt geschrumpft ist.
Als nächstes erstellen Sie / dev / sdb2
. Wir werden "gdisk" für diese Aufgabe verwenden. Ich kann eine neue Partition mit "parted" erstellen, aber ich konnte sie nicht gut ausrichten. gdisk
wird auch nahtlos ausgerichtet, daher habe ich mich entschieden, dies beim Partitionieren zu verwenden. Im Gegenteil, es ist schnell, die Größe der Partition mit "parted" zu ändern.
Hier wird angenommen, dass "/ dev / sdb2" 1 TB als "opt" und "/ dev / sdb3" 2 TB als "/ var" ist.
In der Hilfe finden Sie den interaktiven Befehl gdisk
. Jeder hier verwendete Befehl
-- n
: Erstellt eine neue Partition
-- c
: Partition umbenennen
--p
: Partitionstabelle drucken
-- w
: Partition schreiben
Es werden also keine Änderungen geschrieben, bis Sie "w" ausführen.
# gdisk /dev/sdb
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): n
Partition number (2-128, default 2): 2
First sector (34-11712573406, default = 6291460096) or {+-}size{KMGTP}:
Last sector (6291460096-11712573406, default = 11712573406) or {+-}size{KMGTP}: +1T
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'
Command (? for help): n
Partition number (3-128, default 3): 3
First sector (34-11712573406, default = 8438943744) or {+-}size{KMGTP}:
Last sector (8438943744-11712573406, default = 11712573406) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'
Command (? for help): c
Partition number (1-3): 2
Enter name: opt
Command (? for help): c
Partition number (1-3): 3
Enter name: var
Command (? for help): p
Disk /dev/sdb: 11712573440 sectors, 5.5 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): BE239631-679B-474D-B43A-305F9146AE5D
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 11712573406
Partitions will be aligned on 2048-sector boundaries
Total free space is 4061 sectors (2.0 MiB)
Number Start (sector) End (sector) Size Code Name
1 2048 6291458048 2.9 TiB 0700
2 6291460096 8438943743 1024.0 GiB 8300 opt
3 8438943744 11712573406 1.5 TiB 8300 var
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sdb.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.
Nachdem die Partition abgeschnitten wurde, starten Sie sie neu, um das Gerät zu erkennen.
Formatieren Sie dann jede neu geschnittene Partition mit "ext4". Verwenden Sie den Befehl mkfs.ext4
, um mit ext4
zu formatieren.
# mkfs.ext4 /dev/sdb2
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
67108864 inodes, 268435456 blocks
13421772 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2415919104
8192 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
# mkfs.ext4 /dev/sdb3
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
102301696 inodes, 409203707 blocks
20460185 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2558525440
12488 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
Die Formatierung ist jetzt abgeschlossen.
/ var
, / opt
in eine neu geschnittene PartitionErstens, wenn es einen Dienst gibt, der auf das vorhandene / var
, / opt
(in / dev / sda1
) zugreift, kann die Migrationsarbeit nicht ausgeführt werden. Wechseln Sie daher in den Einzelbenutzermodus.
# init 1
In dieser Arbeit wurde der Server nicht direkt betrieben, sondern aufgrund der Protokollsammlung über ssh, sodass nur diese Arbeit den Hauptteil direkt berührte und network
, sshd
startete.
# systemctl start network.service
# systemctl start sshd.service
Als nächstes mounten Sie vorübergehend "/ dev / sdb2" und "/ dev / sdb3" und kopieren Sie den Inhalt des aktuellen "/ opt" bzw. "/ var".
# cd /mnt
# mkdir opt_new var_new
# mount /dev/sdb2 opt_new/
# mount /dev/sdb3 var_new/
# rsync -au /opt/* opt_new/
# rsync -au /var/* var_new/
Jetzt wird das / opt
in / dev / sda1
nach / dev / sdb2
und das / var
in / dev / sda1
nach / dev / sdb3
kopiert. ..
Nehmen Sie es ab und lassen Sie es für alle Fälle "fsck".
# umount /dev/sdb2
# umount /dev/sdb3
# e2fsck -f /dev/sdb2
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sdb2: 312692/67108864 files (0.2% non-contiguous), 9517164/268435456 blocks
# e2fsck -f /dev/sdb3
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sdb3: 231758/102301696 files (0.2% non-contiguous), 11135325/409203707 blocks
Es ist in Ordnung.
Ändern Sie als Nächstes das aktuelle / opt
und / var
in / opt.org
bzw. / var.org
und erstellen Sie die Mount-Zielverzeichnisse / opt
und / var
.
# cd /
# mv opt opt.org
# mv var var.org
# mkdir opt var
/ etc / fstab
Dann bearbeiten Sie / etc / fstab
. Überprüfen Sie zuvor die UUID des Geräts. Der Einfachheit halber wurde die UUID geändert, um das Verständnis zu erleichtern. Lesen Sie sie daher gegebenenfalls.
# ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 Jul 2 14:51 33333333-3333-3333-3333-333333333333 -> ../../sdb3
lrwxrwxrwx 1 root root 10 Jul 2 14:51 22222222-2222-2222-2222-222222222222 -> ../../sdb2
lrwxrwxrwx 1 root root 10 Jul 2 14:23 11111111-1111-1111-1111-111111111111 -> ../../sdb1
Wenn Sie bestätigen können, bearbeiten Sie "/ etc / fstab" und geben Sie "/ dev / sdb2" als Einhängepunkt "/ opt" und "/ dev / sdb3" als Einhängepunkt "/ var" an.
/etc/fstab(Auszug nur dort, wo es relevant ist)
UUID=11111111-1111-1111-1111-111111111111 /home ext4 defaults 1 2
UUID=22222222-2222-2222-2222-222222222222 /opt ext4 defaults 1 2
UUID=33333333-3333-3333-3333-333333333333 /var ext4 defaults 1 2
Dadurch wird es neu gestartet.
Überprüfen Sie es nach dem Start mit df
(Auszug nur dort, wo es relevant ist).
# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/sdb1 ext4 2.9T 676G 2.1T 25% /home
/dev/sdb2 ext4 1008G 21G 937G 3% /opt
/dev/sdb3 ext4 1.6T 18G 1.5T 2% /var
Es ist normal montiert.
Es wurde auch bestätigt, dass Dienste, die / opt
und / var
verwenden, ordnungsgemäß funktionieren.
In dieser Zeit kann der Speicher in der Cloud variabel zusammengestellt werden, daher denke ich, dass solche gefährlichen Arbeiten weniger wahrscheinlich sind. Bitte lesen Sie sie, wenn Sie die Möglichkeit dazu haben. Vergessen Sie nicht, ein Backup zu erstellen und es sicher aufzubewahren.