Synology NAS: Run Fsck To Check and Repair a Linux File System

DS509+I own a Linux powered Synology dedicated Network Attached Storage (NAS) server for my home office use. How do I run fsck on Synology DiskStation that offers RAID storage using Linux command line options over an ssh session?

This server is powered by Linux operating system and comes with the e2fsck program that can be used to check the ext3/ext4 family of file systems.

Difficulty: Intermediate
Root privileges: Yes
Requirements: Synology server

First, you need to login using ssh interface. The syntax is as follows:

ssh root@nas01
ssh root@nas-server-ip-here

Once logged in you need to stop running services such as smb/nfs/pgsql and so. To see current volumes or mount point type the following command:

df

Sample outputs:

Filesystem           1K-blocks      Used Available Use% Mounted on
rootfs                 2451064    437412   1911252  19% /
/dev/root              2451064    437412   1911252  19% /
/tmp                    255700       272    255428   1% /tmp
/dev/vg1/volume_1    2879621632 176443652 2703075580   7% /volume1
/dev/vg1/volume_1    2879621632 176443652 2703075580   7% /opt

To see current services accessing the /volume1/ and /opt/, run:

lsof /opt/
lsof /volume1/

Sample outputs:

COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
postgres 5052 admin  cwd    DIR  253,0     4096      18 /volume1/@database/pgsql
postgres 5057 admin  cwd    DIR  253,0     4096      18 /volume1/@database/pgsql
postgres 5057 admin   17u   REG  253,0 16777216 3539006 /volume1/@database/pgsql/pg_xlog/000000010000000000000006
postgres 5058 admin  cwd    DIR  253,0     4096      18 /volume1/@database/pgsql
lsof     8284  root  txt    REG  253,0   125544 4068473 /opt/sbin/lsof
lsof     8285  root  txt    REG  253,0   125544 4068473 /opt/sbin/lsof

You need to stop pgsql service, enter:

/usr/syno/etc/rc.d/S20pgsql.sh stop

Sample outputs:

Stopping PostgreSQL...

In short, you need to stop services that are running and accessing data shares such as SMB,NFS,pgsql,mysql and so on. You can use web interface to stop these services too. cd to /usr/syno/etc/rc.d/ and stop all file sharing services. Finally, unmount volumes as follows:

umount /volume1/
umount /opt

Verify that /opt and /volume1/ are unmounted:

df

Sample outputs:

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/md0               2451064    437408   1911256  19% /
/tmp                    255700       264    255436   0% /tmp

Run fsck on ext4 file system:

fsck.ext4 -v /dev/vg1/volume_1

OR

e2fsck -p -y -f -v /dev/vg1/volume_1

Sample outputs:

e2fsck 1.41.12 (17-May-2010)
1.41.12-2198: is cleanly umounted, 474816/182845440 files, 55587266/731381760 blocks
 (check after next mount)

Reboot the server:

reboot

GRUB 2 — ошибка 15

Изредка, особенно при невнимательной настройке загрузчика grub2 возникает ситуация, при которой система полностью отказывается грузиться, а на экране консоли возникает ошибка — “Error 15: File not found!”. Для решения проблемы необходимо внести изменения в файл /boot/grub/menu.lst, указав правильный раздел для загрузки — раздел root.

С начала загружаемся с Live CD и открываем терминал.

Проверяем, какие разделы доступны в системе:

$ sudo fdisk -l | grep -i linux

Обычно это раздел системы и swap-раздел. Нас интересует раздел, содержащий /root.

/dev/hda5  1276  1397  979902    82  Linux swap / Solaris
/dev/hda6  1398  2550  9261441   83  Linux

/dev/hda6 — в нашем примере это раздел root. /dev/hda6 прописывается в grub, как (hd0,5). К примеру, если ваша система находится в /dev/hda1, то при загрузке нужно прописывать — (hd0,0). В grub прописывается значение на единицу меньшее, чем указано в разделе.

Откройте файл menu.lst и проверьте, что /dev/hda6 и (hd0,5) соответствуют разделу root, и никаких лишних разделов не указано. Это основная причина появления ошибки 15. В нашем примере root-раздел должен соответствовать разделу /dev/hda6, ниже указан пример файла /boot/grub/menu.lst:

title       Debian GNU/Linux, kernel 2.6.26-2-686
root        (hd0,5)
kernel      /boot/vmlinuz-2.6.26-2-686 root=/dev/hda6 ro
initrd      /boot/initrd.img-2.6.26-2-686
title       Debian GNU/Linux, kernel 2.6.26-2-686 (single-user mode)
root        (hd0,5)
kernel      /boot/vmlinuz-2.6.26-2-686 root=/dev/hda6 ro single
initrd      /boot/initrd.img-2.6.26-2-686

Далее желательно проверить файл /etc/fstab на соответствие разделов и типов файловых систем:

# /etc/fstab: static file system information.
#
# <file system> <mount point>  <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults          0     0
/dev/hda6       /               ext3    errors=remount-ro 0     1
/dev/hda5       none            swap    sw                0     0
/dev/hdc        /media/cdrom0   udf,iso9660 user,noauto   0     0

После перезагрузки, система должна нормально загрузиться.

Переустановка загрузчика

После загрузки LiveCD, открываем терминал и монтируем разделы системы:

Предварительно запускаем fdisk для того, чтобы удостовериться в правильности указания корневого раздела.

# fdisk -l

Монтирование обычных систем:

# mount /dev/sda2 /mnt/

Если /boot примонтирован отдельно:

# mount /dev/sda1 /mnt/boot

Монтирование специальных систем:

# mount --bind /dev /mnt/dev
# mount --bind /dev/pts /mnt/dev/pts
# mount --bind /proc /mnt/proc
# mount --bind /sys /mnt/sys

Заходим в chroot-систему:

# chroot /mnt

Если отсутствует файл /boot/grub/grub.cfg, или есть проблемы с настройкой:

# update-grub

Переустанавливаем GRUB2 :

# grub-install /dev/sda

(Внимание! Номер после названия раздела не пишется!)

Проверяем правильность настроек:

# grub-install --recheck /dev/sda

Выходим из chroot-системы:

# exit

# umount /mnt/sys
# umount /mnt/proc
# umount /mnt/dev/pts
# umount /mnt/dev
# umount /mnt/boot
# umount /mnt

# reboot

После перезагрузки всё должно заработать! 🙂