История Bash повреждена после потери питания

335
Rich

Я пошел в магазин, и когда я вернулся, я обнаружил, что забыл подключить свой ноутбук, и он умер от разряда батареи. Когда я перезагрузился, я с удивлением обнаружил, что моя история bash вместо того, чтобы содержать мои команды терминала, теперь выглядела так:

don@don-Dell-PowerbookBook-777w:~$ �$6:�P!^G����^^B)A|E1����t^E���@=(�|0H�^N�s����+�����C�Ώ)p��s� pn�ǡ!�ǝ\��"^H�n^M^Rs��$u�^[���^S����![�0^R&^R���@��T���v��8^T^N��^ZJ�O�*�Y$:�A�^[6��jٸ�EIl>��^L�ژ���^^^Xw^T^[��/^Q^Aw ߨ~�>���s"�6d��^\�U%�a^M/p^P��iޠ��\^M^Z^9��^_l�]*�Ų���J͜��^UK�u� ����N^S���^G5^B^D�p^^^E��4�&�Qi�^U^?�T^T��- 

И когда я побежал gedit .bash_history, я получил это:

При открытии файла «/home/dave/.bash_history» возникла проблема.

Файл, который вы открыли, содержит недопустимые символы. Если вы продолжите редактирование этого файла, вы можете испортить этот документ. Вы также можете выбрать другую кодировку и повторить попытку.

Кодировка символов: текущая локаль (UTF-8)

а потом:

\D3Q\F6\98ڵ\9B\A8a\9B\97\C7׬\A2\B5\F7\B0,.\B4\FD\E4N\A9͈\FEK\EF蓪*,q\D5HbI\C6!iB\BC\D33\A7\C5\EC\E3\\AE|\D1<%Hx9a\FEI\BE\93f\84\92\C1\AF\B7Ed,6DI<\B5\F9*t\00\DB]PZ\AE\EB\D2\A1e\8C\D4\F8\B4'\8A\CD\00F-\89\CBs\FD;k\CBUv\E1\F8߱y\D0;\BB\9E ůLteE\94\9B\D1\00\E7\CF)\\E51,\9C\81}\E6\96=\C7l\D8v.#s\CE\D5\C2%2\8EZ\93\93<\DD'oIKl.\CC81~\80\DC\F9\A5ȡ@6\E0\DA\F8\92j%\D2;: b(\BE\F5Dv\86\CD"\A0vCc\EC\A2\F8oP\88\CEG\ED~y\866\B9\AF\BF\BF\DC}\8F\94\CF\DB\C9\D6\DC\D9\E7\E4\DC-\94H\B3\A7\F3\DF\EB\9DS+\E5\C8\81p\8FK\E2\88h\E7f\A8\809\B4\FBo}&aa\FA;\B7q\E8\8D\DE\B5\B5\DE{\EB\A3\F9D\BB\E8\80\A0\FA\F2\F6\A2\BB\C6\D1\CEaN?*H8\91\BD\B83y\FF\BA)\DDl)\87vn\97D\EF\EEOS\F5\FB\B0U\ 83 \ 94 \ E7D \ E0: \ A3R \ 94 \ EC \ B9O \ D9wr^D,Q\8B2\C1\9A;l\9Db\86@C*$\D4=\B7v\86ۉ\85\B5\D0g\85\C0это специальное имя для указания диска по индексу, но, похоже, оно не работает.

На что мне перейти Set-PhysicalDisk, если я хочу обозначить, скажем, второй диск выше (размер = 100 ГБ)?

PS C:\Users\Administrator> Set-PhysicalDisk -FriendlyName "VMware, VMware Virtual S" -Usage Retired Set-PhysicalDisk : Not Supported At line:1 char:1 + Set-PhysicalDisk -FriendlyName "VMware, VMware Virtual S" -Usage Reti ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (StorageWMI:ROOT/Microsoft/..._StorageCmdlets) [Set-PhysicalDisk], CimException + FullyQualifiedErrorId : StorageWMI 1,Set-PhysicalDisk  PS C:\Users\Administrator> Set-PhysicalDisk PhysicalDisk1 -Usage Retired Set-PhysicalDisk : The requested object could not be found. At line:1 char:1 + Set-PhysicalDisk PhysicalDisk1 -Usage Retired + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (PS_StorageCmdlets:ROOT/Microsoft/..._StorageCmdlets) [Set-PhysicalDisk], CimException 
0

1 ответ на вопрос

0
Eirik Fuller

На этот вопрос есть ответы, в которых перечислены различные способы проверки целостности корневого раздела. Если упомянутая перезагрузка не выполнила проверку целостности, возможно, имеет смысл запустить ее fsckна корневом разделе. После fsckзавершения (независимо от того, произошло ли это уже во время перезагрузки или вы выполняете это явным образом), ваши метаданные будут согласованы, но нет никакой гарантии, что содержимое файла является правильным. Выходной журнал fsckможет дать некоторое представление о степени ущерба.

Особая проблема с вашим файлом истории bash выглядит так, как будто он ошибочно содержит данные, принадлежащие совершенно другому файлу. Наилучшим случаем для этого может быть то, что блоки были выделены в файл истории, но не записаны до потери питания, и в этом случае текущее содержимое файла может просто соответствовать тому, что было у блокированных блоков содержимого до того, как они были назначены вашему файлу истории bash., Более пессимистическая интерпретация этого содержимого файла заключается в том, что метаданные были повреждены (в этом случае fsckвероятный ход действий). Возможно, вы захотите следить за любыми другими файлами, которые могли быть затронуты. В лучшем случае проблемными будут только файлы с достаточно недавним временем модификации.

Что касается спасения того, что осталось от вашей истории bash, простой подход может заключаться в том, чтобы передать его stringsкоманде (которая должна отфильтровывать большую часть того, что выглядит как двоичный контент). Возможно, имеет смысл переопределить значение по умолчанию --bytes( -n), если вы это сделаете, на что-то ближе к вероятной минимальной длине команды. В зависимости от того, насколько велик ваш файл истории bash, и основной причины его поддельного содержимого, могут быть или не быть какие-либо фактические команды, хранящиеся там.

Возможно, имеет смысл переименовать файл истории bash, а не сразу удалять его, чтобы вы могли отложить усилия по спасению, а также иметь историю bash, которая не вызовет проблем при обычной работе bash.