#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # Copyright 2018-present ScyllaDB # # # This file is part of Scylla. # # Scylla is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Scylla is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Scylla. If not, see . import os import sys import shutil from scylla_util import * from subprocess import run, DEVNULL if __name__ == '__main__': if os.getuid() > 0: print('Requires root permission.') sys.exit(1) if not shutil.which('mkfs.xfs'): pkg_install('xfsprogs') os.makedirs('/var/tmp/mnt', exist_ok=True) run('dd if=/dev/zero of=/var/tmp/kernel-check.img bs=1M count=128', shell=True, check=True, stdout=DEVNULL, stderr=DEVNULL) run('mkfs.xfs /var/tmp/kernel-check.img', shell=True, check=True, stdout=DEVNULL, stderr=DEVNULL) run('mount /var/tmp/kernel-check.img /var/tmp/mnt -o loop', shell=True, check=True, stdout=DEVNULL, stderr=DEVNULL) ret = run('iotune --fs-check --evaluation-directory /var/tmp/mnt', shell=True).returncode run('umount /var/tmp/mnt', shell=True, check=True) shutil.rmtree('/var/tmp/mnt') os.remove('/var/tmp/kernel-check.img') if ret == 0: print('This is a supported kernel version.') else: print('Please upgrade to a newer kernel version.') print(' see https://docs.scylladb.com/troubleshooting/error_messages/kb_fs_not_qualified_aio/ for details') sys.exit(ret)