Запуск Fish-терминала из bashrc нарушает стандартный ввод терминала.

Я только что создал новую растянутую виртуальную машину, чтобы проверить это. Минимальная установка (только ssh и стандартные системные инструменты ), отредактируйте sources.list, чтобы добавить contrib и non -бесплатно, затем:

apt-get install spl-dkms zfs-dkms

Вы также можете установить вручную zfsutils-linux. Он должен быть установлен автоматически при установке zfs-dkms, но зависимости могут различаться для разных выпусков Debian и для разных версий пакетов Debian ZoL :

.
apt-get install  zfsutils-linux

Похоже, что в юнит-файле systemd для zfs-shareесть ошибка. Он пытается запустить /usr/bin/rmвместо /bin/rm.

Быстрое исправление — запустить ln -s /bin/rm /usr/binили, как вариант,:

cd /etc/systemd/system
cp -a /lib/systemd/system/zfs-share.service.
edit zfs-share.service and change `/usr/bin/rm` to `/bin/rm`

, а затем перезапустите службы zfs:

systemctl restart zfs-import-cache
systemctl restart zfs-import-scan
systemctl restart zfs-mount
systemctl restart zfs-share

ПРИМЕЧАНИЕ. :Я вручную запускал modprobe zfsперед перезапуском любой из служб zfs. Я не уверен, сделают ли они это автоматически или нет, так что вам тоже может понадобиться это сделать.

Кстати, вы, вероятно, тоже захотите apt-get install zfs-initramfs, чтобы убедиться, что zfs загружается во время initramfs.


Я проверил, что это работает с:

# truncate -s 100M /root/z1
# truncate -s 100M /root/z2
# zpool create tank mirror /root/z1 /root/z2 

# zfs set compression=lz4 tank
# rsync -ax /etc /tank/
# du -sch /etc /tank/etc/
3.5M    /etc
825K    /tank/etc/
4.3M    total

# zpool scrub tank
# zpool status
  pool: tank
 state: ONLINE
  scan: scrub repaired 0 in 0h0m with 0 errors on Thu Aug  3 19:28:21 2017
config:

    NAME          STATE     READ WRITE CKSUM
    tank          ONLINE       0     0     0
      mirror-0    ONLINE       0     0     0
        /root/z1  ONLINE       0     0     0
        /root/z2  ONLINE       0     0     0

errors: No known data errors

Zpool работает, и /tank автоматически монтируется после перезагрузки.

Заключение :Теперь все работает.


Кстати, эта растянутая виртуальная машина использует в качестве диска ZFS zvol, созданный в моей основной sidсистеме. Я сделал его снимок сразу после первоначальной установки,перед установкой spl -dkms и zfs -dkms, чтобы я мог быстро вернуться и начать заново, если что-то серьезное пойдет не так.

Сначала я сделал zvol всего с 1 ГБ, а позже мне пришлось увеличить его, чтобы было достаточно места для сборки -Essential, Linux -заголовков -amd64 и т. д.:

# zfs list -r -t all export/volumes/stretch
NAME                                         USED  AVAIL  REFER  MOUNTPOINT
export/volumes/stretch                      6.25G   834G  1.77G  -
export/volumes/stretch@2017-08-03-18:31:04   279M      -  1.09G  -

настройка compression=lz4на танке в ВМ наверное хуже чем бесполезна -на zvol уже есть компрессия lz4.

1
01.11.2019, 11:52
2 ответа

Когда вы выходите из сеанса оболочки fish, оболочка bash, которая запускалась, но была «приостановлена» во время работы fish, продолжает работать. По какой-то причине он оставляет терминал в запутанном состоянии (попробуйте resetили stty sane, чтобы исправить это ).

Если вы всегда хотите запускать оболочку fishвместо bash, то будет проще просто изменить оболочку входа в систему на fish. Вы делаете это с помощью команды chshна большинстве Unices.

Если это невозможно, то вместо того, чтобы просто запускать fishиз вашего ~/.bashrcфайла, используйте exec fishгде-то в начале файла. Это заменит любой интерактивный bashсеанс оболочки сеансом оболочки fish, и при выходе из сеанса fishвы не останетесь в сеансе bash.

1
27.01.2020, 23:29

Вы можете запустить stty saneили reset, чтобы вернуть терминалу то, что вы ожидаете.

Вместо запуска с нижней части .bashrcвы можете настроить свой терминал так, чтобы он запускал fishвместо вашей оболочки входа в систему.

1
27.01.2020, 23:29

Теги

Похожие вопросы