作者: Analyser

  • About SCP on Synology DSM

    Scp to Synology DSM file system will use SFTP, not through SSH(default port: 8022), so you should use port 9022 (default port for SFTP) instead. And, you should use user space file system root as the target root. For example, you have a shared directory on /volume1/books/, you can use /books/ as the path, /volume1/books/ not works.

    scp -P 9022 convert_to_utf8 username@synology_dsm_hostname:/books/collection/
  • EdgeRouter UPnP2 Configuration with ACL Control

    Configuration Example:

    service {
        upnp2 {
            acl {
                rule 1 {
                    action allow
                    external-port 1024-65535
                    local-port 0-65535
                    subnet 192.168.199.0/24
                }
                rule 2 {
                    action allow
                    external-port 1024-65535
                    local-port 0-65535
                    subnet 192.168.5.121/32
                }
                rule 3 {
                    action deny
                    external-port 1024-65535
                    local-port 0-65535
                    subnet 192.168.0.0/16
                }
            }
            listen-on eth1
            nat-pmp enable
            secure-mode enable
            wan eth0
        }
    }

    Looks like it is compatible with Synology DSM 7.

  • DBeaver Clickhouse session problem

    When using user settings (e.g. SET max_parser_depth = 2000) in DBeaver’s Clickhouse query window, an error will occur.

    A typical error message is:

    SQL Error [113] [07000]: Code: 113. DB::Exception: There is no session or session context has expired. (THERE_IS_NO_SESSION) (version 22.x.x.x (official build)), server ClickHouseNode [uri=http://xxx.xxx.xxx.xxx:8123/system]

    How to resolve it?

    By default, DBeaver does not connect using a session (the CLI for example does). If you require session support (for example to set settings for your session), edit the driver connection properties and set session_id to a random string (it uses the http connection under the hood). Then you can use any setting from the query window.

    From Clickhouse Documentation:

    https://clickhouse.com/docs/en/interfaces/third-party/gui#dbeaver

  • OCFS2 手册

    OCFS2 – Linux共享磁盘集群文件系统

    引言

    OCFS2是一个文件系统。它允许用户存储和检索数据。数据存储在以分层目录树组织的文件中。它是POSIX兼容的文件系统,支持该规范说明的标准接口和行为语义。

    它也是一个共享磁盘集群文件系统,该文件系统允许多个节点同时访问同一磁盘。这就是乐趣的开始,因为允许在多个节点上访问文件系统会打开蠕虫罐。(This is where the fun begins as allowing a file system to be accessible on multiple nodes opens a can of worms.) 如果节点具有不同的架构怎么办?如果节点在写入文件系统时挂掉,该怎么办?如果两个节点上的进程同时进行读写操作,可以期待什么样的数据一致性?如果一个节点在文件仍在另一节点上使用的同时删除了该文件怎么办?

    与答案模糊的大多数共享文件系统不同,OCFS2中的答案定义非常明确。它在所有节点上的行为与本地文件系统完全相同。如果删除了文件,则将删除目录条目,但只要在整个集群中都使用它,inode就会保留。当最后一个用户关闭描述符时,将索引节点标记为删除。

    数据一致性模型遵循相同的原理。它就像在两个不同节点上运行的两个进程在同一个节点上运行一样。不管使用哪种IO模式,对节点的读取都将获得最后的写入。这些模式可以是缓冲,直接,异步,拼接或内存映射的IO。它是完全高速缓存连贯的。

    以REFLINK功能为例,该功能允许用户创建文件的多个可写快照。像所有其他功能一样,此功能完全支持集群。在多个节点上写入的文件可以在另一个节点上安全地重新链接。创建的快照是文件的时间点映像,其中包括文件数据及其所有属性(包括扩展属性)。

    它是日记文件系统。当节点死亡时,存活节点透明地重放死亡节点的日志。这样可以确保文件系统元数据始终保持一致。它还默认使用有序数据日志记录,以确保在日志记录提交之前将文件数据刷新到磁盘,以消除崩溃后文件中出现陈旧数据的这种很小的可能性。

    它是体系结构和字节序中立的。它允许在具有不同处理器(例如x86,x86_64,IA64和PPC64)的节点上并发安装。它处理大小端字节的32位和64位体系结构。

    它是功能丰富的。它支持索引目录、元数据校验和、扩展属性、POSIX ACL、配额、REFLINK、稀疏文件、未写入的扩展数据和内联数据。

    它与主线Linux内核完全集成。OCFS2文件系统在2006年初合并到Linux内核2.6.16中。

    它可快速安装。几乎所有Linux发行版都可以使用它。文件系统在所有磁盘上都是磁盘兼容的。

    它是模块化的。可以将文件系统配置为与其他集群堆栈(如Pacemaker和CMAN)以及其自己的堆栈O2CB一起运行。

    它易于配置。O2CB集群堆栈配置涉及编辑两个文件,一个用于集群布局,另一个用于集群超时。

    它非常有效。OCFS2文件系统消耗很少的资源。它用于在有限的内存环境(例如Xen和KVM)中存储虚拟机映像。

    总之,OCFS2是一个高效,易于配置,模块化,快速安装,完全集成和兼容,功能丰富的体系结构和字节序中性,缓存一致,有序数据日志记录,符合POSIX的共享磁盘集群文件系统。

    概览

    OCFS2是用于Linux的通用共享磁盘集群文件系统,能够同时提供高性能和高可用性。

    由于它提供了本地文件系统语义,因此几乎可以与所有应用程序一起使用。支持集群的应用程序可以利用来自多个节点的缓存一致性并行I/O轻松扩展应用程序。如果节点发生故障,其他应用程序可以利用集群工具对正在运行的应用程序进行故障转移。

    OCFS2文件系统值得关注的特性有:

    可调块大小

    文件系统支持512、1K,2K和4K字节的块大小。几乎总是建议使用4KB。该功能在OCFS2文件系统的所有发行版中均可用。

    可调簇大小

    簇大小也称为分配单位。文件系统支持4K,8K,16K,32K,64K,128K,256K,512K和1M字节的簇大小。对于大多数用例,建议使用4KB。 但是,对于托管大部分都非常大的文件(例如数据库文件、虚拟机映像等)的卷,建议使用较大的值。较大的簇大小可使文件系统更有效地存储大文件。该功能在OCFS2文件系统的所有发行版中均可用。

    字节序和架构中立

    文件系统可以同时挂载在具有不同体系结构的节点上。像32位、64位、Little-Endian(x86,x86_64,ia64)和Big-endian(ppc64,s390x)。该功能在OCFS2文件系统的所有发行版中均可用。

    缓冲、直接、异步、拼接和内存映射的I/O模式

    文件系统支持所有I/O模式,以实现最大的灵活性和性能。它还支持集群范围内的共享可写mmap(2)。在所有发行版中都提供对缓冲、直接和异步I/O的支持。在Linux内核2.6.20中添加了对Splice I/O的支持,并在2.6.23中添加了对共享可写map(2)的支持。

    多个集群堆栈

    文件系统包括一个灵活的框架,使其可以与用户空间集群堆栈(如Pacemaker(pcmk)和CMAN(cman))、其自己的内核内集群堆栈o2cb、无集群堆栈一起工作。

    所有版本均提供对o2cb集群堆栈的支持。

    Linux内核2.6.20中增加了对无集群堆栈或本地挂载的支持。

    Linux内核2.6.26中增加了对用户空间集群堆栈的支持。

    日志记录

    文件系统支持有序(默认)和回写数据日志记录模式,以在电源故障或系统崩溃时提供文件系统一致性。它在Linux内核2.6.28及更高版本中使用JBD2。它在较早的内核中使用JBD。

    基于范围的分配

    文件系统在集群范围内分配和跟踪空间。这与必须跟踪每个块的基于块的文件系统不同。此功能使文件系统在处理大容量文件和大文件时都非常高效。该功能在文件系统的所有发行版中均可用。

    稀疏文件

    稀疏文件是带有空洞的文件。使用此功能,文件系统会延迟分配空间,直到向集群发出写操作为止。此功能已添加到Linux内核2.6.22中,并且需要启用磁盘功能 sparse

    未写入的范围

    未写入的范围也称为用户预分配。它允许应用程序请求在文件中分配一定范围的簇,但不初始化。预分配使文件系统可以用更少,更大的范围来优化数据布局。它还可以提高性能,延迟初始化,直到用户写入簇为止。此功能已添加到Linux内核2.6.23中,并且需要启用磁盘功能 unwritten

    打孔

    打孔允许应用程序删除文件中任意分配的区域。本质上是制造孔。这比将相同范围调零更为有效。此功能在虚拟化环境中特别有用,因为它允许将Guest文件系统中的块丢弃转换为主机文件系统中的打孔,从而允许用户减少磁盘空间使用。 此功能已添加到Linux内核2.6.23中,并且需要启用磁盘功能 sparse以及unwritten

    内联数据

    内联数据也称为in-inode数据,因为它允许在inode块中存储小的文件和目录。这不仅节省了空间,而且对冷缓存目录和文件操作产生了积极影响。当数据不再适合inode块时,将透明地移出数据。此功能已添加到Linux内核2.6.24中,并且需要启用磁盘功能 inline-data

    REFLINK

    REFLINK也称为快速复制。它允许用户自动(并立即)复制常规文件。换句话说,创建常规文件的多个可写快照。之所以称为REFLINK,是因为其看上去比传统快照更像(硬)链接。像链接一样,它是常规的用户操作,受限于reflinked的inode的安全性属性,而不是创建快照通常所需的超级用户特权。像链接一样,它在文件系统中运行。但是,与链接不同,它在数据范围级别上链接inode,从而使每个reflinked的inode在写入时都可以独立增长。多达40亿个inode可以共享一个数据范围。此功能已添加到Linux内核2.6.32中,并且需要启用磁盘功能引用计数( refcount)。

    分配保留

    文件连续性在文件系统性能中起着重要作用。当文件在磁盘上碎片化时,对该文件的读写操作涉及许多Seek动作,从而导致吞吐量降低。另一方面,连续文件可最大程度地减少寻道,从而使磁盘以最大速率执行IO。

    通过分配保留,文件系统会在位图中为所有扩展文件保留一个窗口,从而允许每个文件尽可能连续地增长。由于实际上并没有分配额外的空间,因此如有需要,其他文件可以使用它。此功能已在Linux内核2.6.35中添加,可以使用挂载选项 resv_level进行调整。

    索引目录

    索引目录允许用户在非常大的目录中快速查找文件。它还可以加快创建和取消链接的速度,从而提供更好的整体性能。此功能已添加到Linux内核2.6.30中,并且需要启用磁盘功能 indexed-dirs

    文件属性

    这指的是EXT2样式的文件属性,例如不可变的(immutable),使用 chattr修改并使用lsattr查询的属性。Linux内核2.6.19中添加了此功能。

    扩展属性

    扩展属性指的是一个 name:value对,该对可以与常规文件、目录、符号链接等文件系统对象关联。OCFS2允许每个对象关联无限数量的属性。属性名称的长度最多为255个字节,以第一个NUL字符终止。虽然不是必需的,但建议使用可打印的名称(ASCII)。属性值最多可以是64 KB的任意二进制数据。可以使用标准Linux实用程序setfattrgetfattr修改和列出这些属性。此功能已添加到Linux内核2.6.29中,并且需要启用磁盘功能xattr

    元数据校验和

    该功能允许文件系统检测所有元数据块(如inode和目录)中的无提示损坏。此功能已添加到Linux内核2.6.29中,并且需要启用磁盘功能 metaecc

    POSIX ACL和安全属性

    POSIX ACL允许为文件和目录分配细粒度的自由访问权限。该安全方案比传统的文件访问权限(采用严格的user-group-other模型)灵活得多。

    安全属性允许文件系统支持其他安全机制,例如SELinux,SMACK,AppArmor等。

    这两个安全扩展都是在Linux内核2.6.29中添加的,并且需要启用磁盘功能 xattr

    用户和组配额

    此功能允许通过使用诸如 quotasetquotaquotacheckquotaon之类的标准实用程序,来基于用户和用户组设置使用配额。此功能已添加到Linux内核2.6.29中,并且需要启用磁盘功能usrquotagrpquota

    Unix文件锁

    Unix操作系统历来提供了两个系统调用来锁定文件。 flock或BSD锁以及fcntl或POSIX锁。OCFS2将两个文件锁都扩展到了集群。在一个节点上执行的文件锁与在其他节点上执行的文件锁交互。(File locks taken on one node interact with those taken on other nodes.)

    Linux内核2.6.26中增加了对集群 flock的支持。支持所有flock选项,包括内核在用户收到适当的终止信号时取消锁定请求的功能。所有集群堆栈(包括o2cb)都支持此功能。

    Linux内核2.6.28中增加了对集群 fcntl的支持。但是因为需要群组通信才能使锁连贯,所以只有用户空间集群堆栈pcmkcman支持它,而默认集群堆栈o2cb不支持。

    全面的工具支持

    文件系统具有全面的EXT3样式的工具集,该工具集尝试使用相似的参数来简化操作。它包括 mkfs.ocfs2(格式化),tunefs.ocfs2(调整),fsck.ocfs2(检测),debugfs.ocfs2(调试)等。

    在线调整大小

    可以使用 tunefs.ocfs2动态扩展文件系统。Linux内核2.6.25中添加了此功能。

    最近变更

    O2CB集群堆栈具有全局心跳模式。它允许用户指定所有节点上一致的心跳区域。集群堆栈还允许在线添加和删除节点和心跳区域。

    o2cb是新的集群配置实用程序。这是一个易于使用的实用程序,允许用户在不属于集群的节点上创建集群配置。它替换了已不推荐使用的旧实用程序o2cb_ctl

    ocfs2console已被淘汰。

    o2info是一个新的实用程序,可用于提供文件系统信息。它允许非特权用户查看已启用的文件系统功能,块和簇大小,扩展的文件统计信息,可用空间碎片等。

    o2hbmonitor是一个o2hb心跳监视器。这是一种非常轻巧的实用程序,一旦心跳延迟超过警告阈值,便会将消息记录到系统记录器中。该实用程序在识别遇到I/O延迟的卷时很有用。

    debugfs.ocfs2有一些新命令。 net_stats显示各个节点之间的o2net消息时间。这对于确定会减慢集群操作的节点很有用。 stat_sysdir允许用户转储可用于调试问题的整个系统目录。 grpextents将完整的可用空间碎片转储到集群组分配器中。

    mkfs.ocfs2现在默认启用xattrindexed-dirsdiscontig-bgrefcountextended-slotmapclusterinfo特性标志,以及较旧的默认设置(稀疏sparse,未写入unwritten和内联数据inline-data)。

    mount.ocfs2允许用户指定节点之间的缓存一致性级别。默认情况下,文件系统在完全一致性模式下运行,该模式还会序列化直接I/O。尽管此模式在技术上是正确的,但它限制了集群数据库中的I/O吞吐量。该安装选项允许用户将缓存一致性限制为仅缓冲的I/O,以允许多个节点对同一文件进行并发直接写入。此功能适用于Linux内核2.6.37及更高版本。

    兼容性

    OCFS2开发团队竭尽全力维护兼容性。它尝试在文件系统的所有发行版之间维持磁盘和网络协议的兼容性。即使在添加需要磁盘格式和网络协议更改的新功能时,它也会这样做。为了成功做到这一点,它遵循一些规则:

    1. 磁盘格式更改由一组可以打开和关闭的功能标志管理。内核中的文件系统在挂载期间会检测到这些功能,并且仅在了解所有功能后才继续。遇到此问题的用户可以选择禁用该功能或​​将文件系统升级到较新的版本。
    2. 最新版本的ocfs2-tools与文件系统的所有版本兼容。所有实用程序都会检测磁盘上启用的功能,并且仅在了解所有功能后才能继续。遇到此问题的用户必须将工具升级到较新的版本。

    3. 节点协商网络协议版本,以确保所有节点都了解正活跃的协议版本。

    功能特性标识

    功能标志分为三类,即Compat,Incompat和RO Compat。 Compat,或说是Compatible/兼容,是指那种文件系统不需要完全了解即可安全地读取或写入卷的特性。其中一个示例是 backup-super功能,该功能增加了在文件系统中多个位置备份超级块的功能。由于文件系统通常不会读取或写入备份超级块,因此较早的文件系统可以在启用此功能的情况下安全地挂载卷。 Incompat,或说是Incompatible/不兼容,是指那些文件系统需要充分了解才能读取/写入卷的特性。大多数功能特性都属于此类别。 RO Compat,或说是Read-Only Compatible/只读兼容,是文件系统需要充分了解它才能写入卷的功能特性。较旧的软件可以安全地读取启用这些特性的卷。用户和组配额就是一个例子。由于仅在写入文件系统时才操作配额,因此较旧的软件可以安全地以只读模式挂载此类卷。 功能标志列表,添加它的内核版本,了解它的工具的最早版本等如下:

  • Oracle 集群文件系统 (Cluster File System – OCFS2) 用户指南

    1. 引言

    集群文件系统允许集群中的所有节点通过标准文件系统接口并发访问设备。如此可以轻松管理需在集群中运行的应用程序。

    OCFS(版本1)于2002年12月发布,这使 Oracle Real Application Cluster(RAC)用户无需处理 RAW 设备即可运行集群数据库。该文件系统旨在存储与数据库相关的文件,例如数据文件,控制文件,重做日志,存档日志,等等。

    OCFS2 是"下一代" Oracle 集群文件系统。它被设计为通用集群文件系统。使用它,不仅可以将数据库相关文件存储在共享磁盘上,还可以存储 Oracle 二进制文件和配置文件(共享的 Oracle 主目录),从而使 RAC 的管理更加容易。

    2. 安装

    OCFS2 发行版包含两组软件包。即内核模块和工具。

    可从 http://oss.oracle.com/projects/ocfs2/files/ 下载内核模块,并从 http://oss.oracle.com/projects/ocfs2-tools/files/ 下载工具。

    下载适当的软件包。对于内核模块来说,请下载与发行版、平台、内核版本和内核风格(smp、hugemem、psmp等)匹配的模块。对于工具,只需匹配平台和发行版。

    工具包分为两部分。 ocfs2-tools包含命令行工具,而ocfs2console包含这些工具的GUI前端。 尽管为了易于使用而建议使用控制台,但安装该控制台不是必需的。

    CentOS / RedHat

    在将成为 OCFS2 集群一部分的每个节点上,使用 rpm --installrpm --upgrade命令安装软件包。

    Debian / Ubuntu

    以 Ubuntu 20.04 LTS 为例,发行版的内核已默认内置 OCFS2,因此仅需安装工具包:

    # apt install ocfs2-tools
    

    3. 配置

    OCFS2 具有一个配置文件,即 /etc/ocfs2/cluster.conf。在其中,需要指定集群中的所有节点。该文件在集群中的所有节点上都应该相同。虽然可以动态地将新节点添加到集群,但是其他任何更改(例如名称、IP地址)都需要重新启动集群,以使更改生效。

    强烈建议用户使用 ocfs2console来设置cluster.conf并将其传播到集群中的所有节点。这仅需要在集群中的一个节点上完成。完成此步骤后,用户将在集群中的所有节点上看到相同的/etc/ocfs2/cluster.conf。请注意,不同的cluster.conf将导致不可预测的行为。

    启动 ocfs2console并单击菜单项Cluster,然后单击Configure Nodes。如果集群处于脱机状态,则控制台将启动它并显示一条消息。如果不存在cluster.conf,则控制台将创建一个默认群集名称为ocfs2的集群。

    单击添加将节点添加到集群。需要输入节点名称(与主机名相同)、IP地址和端口。控制台从0到254顺序分配节点序数。注意:此处需确保节点名称与对应配置的主机名称完全一致。

    一旦添加了所有节点,就可以通过单击菜单项 ClusterPropagate Configuration,将配置传播到所有节点。控制台使用ssh传播配置文件。如果尚未为自动ssh登录身份验证设置节点(请参阅ssh联机帮助页),则控制台将提示用户输入要传播到的节点的root用户密码。

    请参考附录A中的 cluster.conf示例和布局说明。

    4. O2CB 集群服务

    OCFS2捆绑了自己的群集堆栈O2CB。集群堆栈包括:

    · NM:跟踪 cluster.conf中所有节点的节点管理器 · HB:心跳服务,在节点加入或离开群集时发出上/下通知 · TCP:处理节点之间的通信 · DLM:分布式锁管理器,可跟踪所有锁,其所有者和状态 · CONFIGFS:挂载在 /config上的用户空间驱动配置文件系统 · DLMFS:内核空间DLM的用户空间接口

    所有集群服务都已打包在 o2cb系统服务中。

    OCFS2 操作(如格式化、挂载等),要求至少在要执行该操作的节点上启动 O2CB 集群服务。

    OCFS2 启动的基本步骤如下:

    1)加载 nodemanagerheartbeattcp模块 2)挂载 nodemanagerheartbeat伪文件系统。 3)通过 o2cb_ctl加载集群信息。这会将所有已知节点添加到节点管理器的伪文件系统中。 4)加载 DLM 模块。 5)加载 OCFS2 模块。 6)挂载 OCFS2 文件系统。

    /etc/init.d/o2cb程序负责在计算机引导期间处理步骤1-3。 如果您从源代码树运行,则脚本位于 vendor/common/o2cb.init处。 另外, o2cb_ctl程序也必须位于您的路径中。 它位于源代码树的 o2cb_ctl/o2cb_ctl

    要检查集群的状态,请执行以下操作:

    # /etc/init.d/o2cb status
    Module "configfs": Not loaded
    Filesystem "configfs": Not mounted
    Module "ocfs2_nodemanager": Not loaded
    Module "ocfs2_dlm": Not loaded
    Module "ocfs2_dlmfs": Not loaded
    Filesystem "ocfs2_dlmfs": Not mounted
    

    加载模块:

    # /etc/init.d/o2cb load
    Loading module "configfs": OK
    Mounting configfs filesystem at /config: OK
    Loading module "ocfs2_nodemanager": OK
    Loading module "ocfs2_dlm": OK
    Loading module "ocfs2_dlmfs": OK
    Mounting ocfs2_dlmfs filesystem at /dlm: OK
    

    使集群 ocfs2联机上线:

    # /etc/init.d/o2cb online ocfs2
    Starting cluster ocfs2: OK
    

    现在,O2CB 集群应该已启动,为 OCFS2 操作(如格式化(下一节中将进行描述))做好准备。

    其他 O2CB 操作如下所述。

    使集群 ocfs2脱机下线:

    # /etc/init.d/o2cb offline ocfs2
    Cleaning heartbeat on ocfs2: OK
    Stopping cluster ocfs2: OK
    

    卸载模块:

    # /etc/init.d/o2cb unload
    Unmounting ocfs2_dlmfs filesystem: OK
    Unloading module "ocfs2_dlmfs": OK
    Unmounting configfs filesystem: OK
    Unloading module "configfs": OK
    

    将 O2CB 配置为 OS 引导时启动:

    # /etc/init.d/o2cb configure
        Configuring the O2CB driver.
    
        This will configure the on-boot properties of the O2CB driver.
        The following questions will determine whether the driver is loaded on
        boot.  The current values will be shown in brackets ('[]').  Hitting
        <ENTER> without typing an answer will keep that current value.  Ctrl-C
        will abort.
    
        Load O2CB driver on boot (y/n) [n]: y
        Cluster to start on boot (Enter "none" to clear) []: ocfs2
        Writing O2CB configuration: OK
    #
    

    如果将集群配置为在引导时加载,则可以启动和停止集群 ocfs2,如下所示:

    # /etc/init.d/o2cb start
    Loading module "configfs": OK
    Mounting configfs filesystem at /config: OK
    Loading module "ocfs2_nodemanager": OK
    Loading module "ocfs2_dlm": OK
    Loading module "ocfs2_dlmfs": OK
    Mounting ocfs2_dlmfs filesystem at /dlm: OK
    Starting cluster ocfs2: OK
    
    # /etc/init.d/o2cb stop
    Cleaning heartbeat on ocfs2: OK
    Stopping cluster ocfs2: OK
    Unmounting ocfs2_dlmfs filesystem: OK
    Unloading module "ocfs2_dlmfs": OK
    Unmounting configfs filesystem: OK
    Unloading module "configfs": OK
    

    5. 格式化

    如果 O2CB 集群处于脱机离线状态,请启动它。格式化操作需要集群处于联机在线状态,因为它需要确保该卷未挂载在集群中的某个节点上。

    可以使用控制台或使用命令行工具 mkfs.ocfs2来格式化卷。这需要在集群中的一个节点上完成,其他节点的相同卷不需要重复执行。

    当集群运行时,在共享磁盘设备上创建 OCFS2 文件系统:

    # mkfs.ocfs2 --cluster-stack=o2cb --cluster-name=ocfs2 /dev/sdc1
    

    要使用控制台进行格式化,请启动 ocfs2console,然后单击菜单项Task,然后单击Format

    在可用设备下拉列表中,选择要格式化的设备。控制台将尽可能列出现有的文件系统类型。

    输入卷标。建议您在设备上设一个标签,以方便管理。卷标在格式化之后还可以更改。

    选择一个簇尺寸(Cluster Size)。支持的尺寸范围从4K到1M。对于数据文件卷,对于大文件,簇尺寸为128K或更大是合适的。

    选择块尺寸(Block Size)。支持的尺寸范围从512字节到4K。由于OCFS2在格式化时,不会分配静态inode区域,因此对于大多数磁盘大小,建议使用4K的块尺寸。另一方面,即使支持512字节的块尺寸,也不建议使用这么小的块尺寸。

    格式化之后,簇尺寸和块尺寸均不可更改。

    输入节点插槽的数量。此数字确定可以同时挂载该卷的节点数。此数字可以在以后增加,但不能减少。

    单击确定以格式化该卷。

    要使用命令行工具 mkfs.ocfs2格式化具有4K块尺寸,32K簇尺寸和4个节点插槽容量的卷,请执行以下操作:

    # mkfs.ocfs2 -b 4K -C 32K -N 4 -L oracle_home /dev/sdf2
    mkfs.ocfs2 1.2.0
    Overwriting existing ocfs2 partition.
    Proceed (y/N): y
    Filesystem label=oracle_home
    Block size=4096 (bits=12)
    Cluster size=32768 (bits=15)
    Volume size=21474820096 (655359 clusters) (5242872 blocks)
    21 cluster groups (tail covers 10239 clusters, rest cover 32256 clusters)
    Journal size=33554432
    Initial number of node slots: 4
    Creating bitmaps: done
    Initializing superblock: done
    Writing system files: done
    Writing superblock: done
    Writing lost+found: done
    mkfs.ocfs2 successful
    

    有关 mkfs.ocfs2的完整帮助,请参见其手册页。

    6. 挂载

    如果O2CB集群服务处于脱机离线状态,请启动它。挂载操作要求集群处于联机在线状态。

    可以使用控制台或命令行工具挂载卷。此操作应在需要挂载卷的每个节点上执行。

    要从控制台挂载,请启动 ocfs2console,选择设备并单击Mount。在对话框中,输入挂载点目录,和可选的挂载选项。单击OK。成功挂载后,设备列表将显示挂载点以及设备。

    从命令行挂载:

    # mount -t ocfs2 /dev/sdf2 /u01
    

    要卸载卷,可以在控制台中选择所需的卷,然后单击 Umount,或执行以下操作:

    # umount /u01
    

    Oracle 数据库用户必须使用 datavolumenointr挂载选项,来挂载包含表决磁盘文件(CRS)、集群注册表(OCR)、数据文件、重做日志、存档日志和控制文件的卷。 datavolume挂载选项,可确保 Oracle 进程使用o_direct标志打开文件。 nointr挂载选项,可确保该设备上的读取和写入不会被信号打断。包括 Oracle home 在内的所有其他卷,都应在没有这些挂载选项的情况下挂载。

    要挂载包含 Oracle 数据文件、表决磁盘等的卷,请执行以下操作:

    # mount -t ocfs2 -o datavolume,nointr /dev/sdf2 /u01
    # mount
    /dev/sdf2 on /u01 type ocfs2 (rw,datavolume,nointr)
    

    要在 OS 引导启动时挂载 OCFS2 卷,需要使用 chkconfig启用o2cbocfs2服务,将o2cb配置为在启动时加载,然后将挂载条目添加到/etc/fstab中,如下所示:

    # cat /etc/fstab
    ...
    /dev/sdf2   /u01      ocfs2  _netdev,datavolume,nointr  0  0
    /dev/sdg2   /orahome  ocfs2  _netdev                    0  0
    ...
    

    _netdev挂载选项对于 OCFS2 卷是必须的。此挂载选项指示在网络启动后要挂载该卷,在网络关闭前要卸载该卷。 (只有 Oracle 数据文件等才需要datavolumenointr挂载选项。)

    ocfs2服务可用于装载和卸载 OCFS2 卷。应始终启用它,以确保在关机期间停止网络之前已卸载 OCFS2 卷。

    # chkconfig --add ocfs2
    ocfs2                     0:off  1:off  2:on   3:on   4:off  5:on   6:off
    # chkconfig --add o2cb
    o2cb                      0:off  1:off  2:on   3:on   4:off  5:on   6:off
    #
    #
    # /etc/init.d/o2cb configure
    ...
        Load O2CB driver on boot (y/n) [n]: y
        Cluster to start on boot (Enter "none" to clear) []: ocfs2
        Writing O2CB configuration: OK
    

    请注意,使用 systemd的节点需要其他fstab选项,文件系统才能在引导时自动挂载:

    /dev/sdc1 /srv ocfs2 _netdev,x-systemd.requires=o2cb.service 0 0
    

    remote_fs.target需要使用选项_netdev来挂载文件系统,而x-systemd.requires选项则在文件系统之前启动集群服务(此选项自systemd v220起可用)。

    按卷标挂载:

    # mount -L datafiles /u01
    

    7. 调整

    调整操作允许增加节点插槽数(增加可同时挂载卷的节点数量),更改卷标和增加日志文件的大小。

    tunefs.ocfs2是执行调整的命令行工具。也可以通过控制台访问此工具。

    如果 O2CB 集群服务处于脱机离线状态,请启动它。调整操作需要集群服务联机在线。

    要使用控制台增加卷的节点插槽数,请单击菜单项 Task,然后单击Edit Node Slot count。 输入新数字,然后单击OK

    使用命令行工具 tunefs.ocfs增加节点插槽数:

    # tunefs.ocfs2 -N 8 /dev/sdf2
    tunefs.ocfs2 1.2.0
    Changing number of node slots from 4 to 8
    Proceed (y/N): y
    Added node slots
    Wrote Superblock
    

    要使用控制台更改卷标,请单击菜单项 Task,然后单击Change Label。输入新卷标,然后单击OK

    使用命令行工具 tunefs.ocfs更改卷标:

    # tunefs.ocfs2 -L "old datafiles" /dev/sdf2
    tunefs.ocfs2 1.2.0
    Changing volume label from datafiles to old datafiles
    Proceed (y/N): y
    Changed volume label
    Wrote Superblock
    

    有关 tunefs.ocfs2的完整帮助,请参阅其手册页。

    8. 文件系统检测

    文件系统检测操作检查文件系统的运行状况。建议定期运行此实用程序,以检测并修复卷中的任何不规则之处。

    fsck.ocfs2是执行检测的命令行工具。也可以通过控制台访问此工具。

    启动 ocfs2console,然后单击菜单项Task,然后单击Check。这将执行只读检测操作,并且可以在集群上挂载的文件系统上执行。命令行等效项:

    # fsck.ocfs2 -n /dev/sdf2
    Checking OCFS2 filesystem in /dev/sdf2:
      label:              oracle_home
      uuid:               dc a2 90 1b 24 1f 40 6e 80 e9 85 dd 6b 45 2d 1a
      number of blocks:   5242872
      bytes per block:    4096
      number of clusters: 655359
      bytes per cluster:  32768
      max slots:          4
    
    /dev/sdf2 is clean.  It will be checked after 20 additional mounts.
    

    要进行修复,请单击菜单项 Task,然后单击Repair。此操作要求 O2CB 集群服务联机在线,以确保该卷未安装在集群中的任何节点上。命令行等效项:

    # fsck.ocfs2 -y /dev/sdf2
    Checking OCFS2 filesystem in /dev/sdf2:
      label:              oracle_home
      uuid:               dc a2 90 1b 24 1f 40 6e 80 e9 85 dd 6b 45 2d 1a
      number of blocks:   5242872
      bytes per block:    4096
      number of clusters: 655359
      bytes per cluster:  32768
      max slots:          4
    
    /dev/sdf2 is clean.  It will be checked after 20 additional mounts.
    

    有关 fsck.ocfs2的完整帮助,请参阅其手册页。

    9. 上下文相关的符号链接(CDSL)

    在共享磁盘集群环境中,有时需要在集群中仅共享文件名或目录名,而不共享内容。例如,在共享的Oracle主目录设置中, network/admin/listener.ora对于所有节点都是公用的,但其内容因节点而异。同样,在共享的根目录设置中,集群中的每个节点都需要不同的/etc/

    在这两种情况下,文件或目录的实际内容取决于主机名。在其他情况下,可能需要内容依赖于体系结构(x86,x86-64或IA64)或节点序数。

    为处理此问题,OCFS2实现了上下文相关的符号链接(CDSL)。简言之,它使用软链接将文件或目录名称与其内容进行匹配。(请注意,使用 datavolume挂载选项装载的卷未启用此特性。)

    ocfs2cdsl是用于创建这些链接的命令行工具。

    要创建与主机名相关的 CDSL文件,请执行以下操作:

    root@node32:admin/# ocfs2cdsl listener.ora
    root@node32:admin/# ls –l listener.ora
    lrwxrwxrwx  1 root root   50 Aug  8 11:41 listener.ora ->
            ../.cluster/hostname/{hostname}/10g/network/admin/listener.ora
    

    编辑此文件并保存新内容。要从集群中的其他某个节点访问该文件,请在编辑之前在该节点上创建此CDSL。(由于主机名是默认主机名,因此不需要在命令中指定 -t hostname。)

    root@node31:admin/# ocfs2cdsl listener.ora
    

    转换现有文件为CDSL文件:

    root@node32:admin/# ocfs2cdsl –c sqlnet.ora
    

    再一次,要从群集中的其他某个节点进行访问,请在访问文件之前在该节点上创建CDSL。

    root@node31:admin/# ocfs2cdsl sqlnet.ora
    

    在这种情况下,您会注意到该文件的内容与将其转换为 CDSL 时的内容相同。两个节点上对该文件的任何新更改将对另一个节点不可见。

    要编辑属于另一个主机或体系结构的 CDSL 文件或目录,请从 OCFS2 卷的根目录(挂载目录)中,将目录更改为 .cluster,然后遍历到包含所需副本的目录。 例如,要在 node31 上编辑 node32 的 listener.ora副本,请执行以下操作:

    root@node31:/# ls -l /ohome/.cluster/hostname/node32/10g/network/admin/l*
    -rw-r--r--  1 root root  3867 Aug  8 11:54 listener.ora
    

    要删除CDSL文件,只需取消链接即可,例如,

    root@node31:admin/# rm listener.ora
    

    有关 ocfs2cdsl的完整帮助,请参见其手册页。

    10. 其他工具

    mounted.ocfs2

    mounted.ocfs2是一个命令行工具,用于列出节点上的所有 OCFS2 卷。此工具将扫描/proc/partitions中列出的所有分区,作为其检测过程的一部分。如果以完全检测模式运行,它将列出已挂载该卷的所有节点。

    要列出系统上的所有 OCFS2 卷,请执行以下操作:

    # mounted.ocfs2 -d
    Device           FS     UUID                                 Label
    /dev/sdb1        ocfs2  e70c75a0-a08c-480a-bf50-ebda4191da30 mm_v2_dbf1
    /dev/sdb2        ocfs2  f49163e8-6288-43c4-a792-e9401fde45fa mm_v2_ctrl
    /dev/sdb3        ocfs2  2d441be2-adb6-4c52-9e19-9a7c2c485dc4 mm_v2_dbf2
    /dev/sdb5        ocfs2  8607eae9-8e4f-4495-84e8-8db0bc9da60c mm_v2_log1
    /dev/sdb6        ocfs2  acfb7b7d-a277-4741-9791-620ea9b82670 mm_v2_log2
    /dev/sdf1        ocfs2  84749537-df45-4a97-aa28-fad63760b674 9ihome
    /dev/sdq1        ocfs2  dca2901b-241f-406e-80e9-85dd6b452d1a oracle_home
    /dev/sdcf1       ocfs2  663764bd-1eed-4b3c-aa48-a98f0be0e574 10ghome
    /dev/sdcf2       ocfs2  8e2d9c21-ef47-4fea-8ac5-2306cc60455e mm_v2_log3
    

    列出系统上已挂载 OCFS2 卷的所有节点:

    # mounted.ocfs2 -f
    Device           FS     Nodes
    /dev/sdb1        ocfs2  node31, node32, node33, node34
    /dev/sdb2        ocfs2  node31, node32, node33, node34
    /dev/sdb3        ocfs2  node31, node32, node33, node34
    /dev/sdb5        ocfs2  node31, node32, node33, node34
    /dev/sdb6        ocfs2  node91, node90
    /dev/sdf1        ocfs2  Not mounted
    /dev/sdq1        ocfs2  node34, node35
    /dev/sdcf1       ocfs2  Not mounted
    /dev/sdcf2       ocfs2  Not mounted
    

    注意:仅当 O2CB 集群服务在线时,才列出节点名称。如果不是,它将列出全局节点序数。

    有关 mount.ocfs2的完整帮助,请参见其手册页。

    附录 A

    配置文件为节格式,具有两种节类型,即集群和节点。由于 OCFS2 不支持多个集群,因此典型的 cluster.conf将具有一个集群节和多个节点节。(请注意,cluster.conf解析器当前期望行从第一列开始(无空格),并以冒号结束,并期望参数行以制表符开头,后跟参数名称和值,参数名和值用等于号分隔。)

    示例 /etc/ocfs2/cluster.conf

    cluster:
        node_count = 2
        name = racdb
    
    node:
        ip_port = 7777
        ip_address = 192.168.0.107
        number = 7
        name = node7
        cluster = racdb
    
    node:
        ip_port = 7777
        ip_address = 192.168.0.106
        number = 6
        name = node6
        cluster = racdb
    

    集群小节有两个参数:

    · node_count – 集群中的节点总数 · name – 集群名称

    节点小节有五个参数:

    · ip_port – IP 端口 · ip_address – IP 地址 · number – 从0到254的唯一节点序数 · name – 主机名(Hostname) · cluster – 与集群小节中相匹配的集群名称

    附录 B – Debian/Ubuntu 特定的信息

    集群设置

    在完成集群配置文件编辑后,可以用使用 ocfs2-tools来启用集群服务:

    # dpkg-reconfigure ocfs2-tools
    

    然后,重启 o2cb 服务,这将加载需要的内核模块,并启动集群服务:

    # service o2cb restart
    
  • 刘军宁:市场经济与有限政府

    现在,我们面临的问题是,市场经济在中国的确立需要我们的社会作出什么样的、根本的、不可或缺的变革,才能具备与市场经济相兼容的社会政治条件。

    在20世纪世界上为数不多的试图彻底回避市场经济的国家中,中国无疑曾经是最执著、肯为之付出莫大代价的国家之一。时至今日,中国虽然踏上了市场经济的不归路,但仍然面临著许多有形的和无形的巨大阻力。另一方面,市场经济在中国是不可逆转的进程,中国人对市场经济的选择是义无反顾的选择。现在,我们面临的问题是,市场经济在中国的确立需要我们的社会作出什么样的、根本的、不可或缺的变革,才能具备与市场经济相兼容的社会政治条件。

    这样的变革的重要性在于,如果我们不准备满足这样的条件,那么市场经济就无法在中国建立起来,我们费了巨大的周折才作出的对市场经济的选择就可能半途而废。如此看来,市场经济所必需的社会政治条件又是些什么样的条件呢?这与人们常常问到的另一个问题相关,这个问题是:中国当今面临的最大的挑战是什么?中国目前面临的问题可以说是千千万,有政治方面的,有经济方面的,有人口方面的,有资源方面的,还有社会道德和文化传统方面的。有来自本土的挑战,也有来自异域的挑战。但是,我认为,目前中国面临的最大的挑战还是来自实行市场经济的必要性与落实市场经济的社会与政治条件的缺乏之间所构成的紧张关系所形成的挑战,或者说,是构建市场经济所必不可少的有限政府(Limited Government),实现由与计划经济相适应的无限政府向与市场经济相适应的有限政府的变革。在我国,从1978年的联产计酬承包责任制、到1992年正式宣布以市场经济取代计划经济,再到1997年前不久正式宣布对公有制进行重大的改造,市场经济在中国的确立已是历史的必然。那么,随之带来的一个新的重大问题是,如何构建一个与市场经济相配套的限政秩序,迎来一个前所未有的,而又无法回避的限政时代?又如何解决限制政府的必要与限制政府的难度之间的矛盾?

    从早期实行市场经济的国家(如英国、美国)的经验来看,人们当初并不知道世界上有个叫市场经济的的东西,没有在宪法和建国时期的任何官方文件中规定要实行市场经济,但是一旦宪法(不论是成文的、还是不成文的)保障了公民的财产权和经济自由,用代表制度、宪政、分权制衡和司法独立的方式对政府的权力进行了有效的限制,即有限政府;一旦市场经济到位,有限政府到位,民主也就水到渠成。对第一波的民主化国家来说,民主只是追授的荣誉,而不是刻意追求的成果。所以在市场经济为一方,与公民的权利、自由和有限政府为另一方的关系中,前者是果,后者是因。仅有实行市场经济的意愿,而没有确立相应的公民的权利和自由及限政,市场经济只能是空中楼阁。相反,如果承认并保障财产权与经济自由等民权和自由权,实行限政,那么,市场经济会自动实现。所以,能否实行市场经济,关键并不在与是否有这样的意愿,而是更在与作为市场经济之因的必要配套条件是否具备。所以,没有限政时代的来临,就不会有市场经济的成功确立。

    让我们先看看市场经济的两个核心要素:财产权、经济自由与有限政府的关系。

    一、财产权与经济自由

    一切经济活动的目的无非是要创造更多的财富。公民若是没有从事经济活动和支配自己财产的广泛自由,也就没有创造财富的自由,因而也就创造不出大量的财富。所以,要把创造财富的自由落实在社会制度上必然表现为以财产权为基石的自由市场经济。可见,财产权是市场经济得以运转的最重要的条件。财产权是人权、经济活动和法律活动的核心,因为它是实现其他权利的物质前提,它为人们创造财富提供了最强大的动力,围绕著财产及其权利所产生的冲突是人类事务中最基本的冲突。经济自由是最重要的自由,财产权是最重要的权利。没有经济自由,其他自由可能随时会被剥夺;没有财产权,其他权利都是空话。没有属于每一个个人的财产权与经济自由,就没有市场经济。

    财产权是经济繁荣与效率的关键,经济生活中有一条简单而重要的规律,这就是,除非有特殊的情形,花自己的钱比花别人的钱更谨慎。所以,保障个人的财产权比废除个人的财产权能够带来了更高的效率、更高的收益、更低的成本。财产权是市场经济的核心。没有财产权,拿谁的财产去做交易?从这种意义上讲,财产权比市场更重要。常常有人发出这样的诘难:财产权被用来满足私利。但是利己的行为多半会是利他的。自利的本性鼓励每个人尽量用最低的成本生产出最高质量的产品到市场上交易,结果是个人受益、大家受益。但交易的前提是个人拥有、占有支配劳动成果的权利。正当地对待一个人就需要尊重他获得一块包括土地在内的私人空间的权利。在这一块空间里他有权利用、支配属于他的东西以实现他的目的。没有这一领域,个人就将不可能有理性的、道德的行为。每个个人的财产权是一个文明的、正义的、自由与繁荣的社会最为关键的组成部分。

    民富国强的最有效的法宝就是保障财产权。致穷的最便利的办法是不承认任何属于私人的东西,而致富的最快捷的途径就是为民间的财产提供最充分的法律保护。财产权是市场经济的基础,这意味著每个人都有权决定交易的条件,有权说,“这是我的,任何人想动用它必须征得我的同意。”反,若是财产权得不到承认,若是公民通过辛勤劳动所创造的财富不断被他人强占或被政府强制充公,那么,他就不可能有极大的热忱去创造财富,社会财富的总量只会有减无增,最终民不聊生,乃至饿殍遍野。人们只有在有权正当占有劳动成果时,才会放手创造财富,这就要求政府公开承诺对财产权的保障。对财产权与经济自由的剥夺封闭了市场,保护了特权,偏袒了懒惰,禁锢了创造力,从而带来了普遍的贫困和落后,使富国变穷,穷国更穷。在这方面,中国人吃过的苦头不可谓不少,中华文明也因此长期停滞不前。

    经济自由是一切其他自由的保障,并为其他自由的扩展提供了最有效、最可靠的途径。如果自由是最基本的价值,那么,经济自由就是一切其他自由的基础。凡是损害经济自由的,最终也必将损害到其他自由。国家所有、计划经济与大量的管制及干预之所以是不道德的,是因为它们压制了人们的创造性和自律精神。与大政府孪生的高税收是对财产权的极大践踏。把别人的钱花在无用而有害的事情上,且不对出钱者负责,不仅是没有道理的,而且是不道德的。其结果是铺平了通向奴役之路。其结果是铺平了通向奴役之路。就像战争是公开的大规模谋杀一样,滥税是公开的、大规模的盗窃。

    自由的市场经济是个人自由的根本维持手段和表达方式,所以经济自由绝不是一个单纯的买卖问题。在自由市场经济下,每天人们根据自己的偏好作出总量上不计其数的抉择,市场本身根据消费者的这种抉择来自动地有效地配置资源。这样的制度允许人们有极端多样化的消费,这种多样的消费方式和口味既推动了社会的多元化,其本身也是多元社会的产物。这种体制满足了人们形形色色的愿望,不论这些愿望多么琐碎,多么粗俗。

    财产权得以确立的原因是:人总是生活在一定的自然环境和社会环境之中,必须在日常生活中作出抉择。财产权仅仅是要表明:为了享有一定的生存空间,人们必须有一定的行使选择权和决定权的空间。他们必须在自然世界和人类世界中拥有自己的权利领域,而且每个人都还必须学会尊重别人的这一领域。否则,自己的这一领域就会变得不安全。

    财产权的正当性还与一项人的根本义务有关,即改进自己的生活、照顾自身的利益。维持和繁衍自己的生命,改进生存的质量首先是自己的事,责无旁贷。财产权正是履行这一义务的根本手段。财产权与责任密切相关。没有财产就没有责任,或者说,责任就失去了其具体的内含。生命是一种自然现象,生命权则要求人们能够适应在自然界生存。因此,若是没有财产权,人的生命权不过是一句空话,难免要受到那些凭借著暴力而实际无偿占有他人乃至社会之财产者的践踏。对文明人来说,财产权甚至比生命权更重要。生命毕竟只是原始的天成之物,是我们作为文明人所拥有的价值的生物基础。不是生命,而是财产权把人的占有与动物的占有区分开来。财产占有的本能是人性中不可抹煞的部分,任何废除财产的做法一旦成功,只能带来更大的灾难。从法国大革命到二十世纪的许多荒谬的政治尝试,及其毁灭文明的惨烈后果,正是来自对财产及其再分配的重视和对财产权的确立与保障的轻视。所以,财产权是神圣的权利,是不可让渡、不可剥夺、不可侵犯的权利。

    财产权与人的其他基本权利和义务之间有一种伴生关系。这些权利义务对财产权反过来构成一定的约束。而财产权的确立又从根本上限制了政府的权力。财产权的牢固程度与一个社会的持续、稳定和繁荣呈高度的正相关。在所有的自由中,经济自由最为珍贵。因为通过经济自由的运用,人们可以互惠互利,可以获得运用其他自由所必需的物质基础。

    经济自由是人们在日常生活中运用的最为广泛的自由,与人们的日常生活的关系也最为密切。没有经济自由,政治自由和其他自由就很容易被从人们身边夺走。换句话说,其他自由的有效运用某种程度上依赖于人们获得、占有和使用财产的自由。比如说,你要行使言论自由,你可能需要有钱租一个会场,需要印发一些材料。对自由权,尤其是对经济自由和财产权利的伸张也意味著必然要求对政府的权力加以限制。一个权力太大的政府肯定要以牺牲个人的自由为代价,一个腐败得不到有效制止的政府必然对人们的财产和财产权构成重大的威胁。

    财产权与经济自由为个人创造了一个不受国家控制的领域,限制了政府及统治者的专横意志。财产权是抵制统治权力扩张的最牢固的屏障,是自由的市场社会赖以发育的温床。财产权不仅是公民个人的经济权利,事实上,也更是政治权利。财产权和自由市场经济必须有政治上的保障,否则就会被统治者的滥权所践踏。不仅如此,财产权还为民主政治提供了最牢固的道德基础。在保障自由、遏制野蛮的专制方面,财产权也起著不可替代的作用。财产权的确立分散了社会中的经济权力,因而避免了政治经济权力的高度集中,为民主创造了必要的经济条件。个人的财产越少,国家的财产就越多,这样个人的自由就越难以得到保障。由于个人在获得生存的物质资源上必然要仰国家之鼻息,这就造成了个人对国家的过度依赖,以至失去个人的独立人格,同时也加重了其他社会成员的负担。没有财产权与经济自由,国家便成了唯一的老板。于是,不管你名义上有多少政治自由,你还是没有条件去行使这些自由。一位英国已故哲人一针见血地指出:一旦生产资料归于单一的占有者之手,奴役就近在眼前。所以,财产权是有限政府的基石,与无限政府不共戴天。

    财产权总是服务于占有者的目的。在产权个人化的社会中,财产权意味著个人有权用自己的财产去服务于自己所追求的目的。在产权公有化的社会中,财产被用来服务于政治制度和政治家们的目的。由于政治的功能是让个人的多样化的生存目的服务于所谓的全社会的共同目的,或者说是多数人的、执政一方的、独裁者的目的。这种共同的目的往往是少数人的乃至是一个人的目的。

    在文明的市场社会中,财产权既是一项经济制度,又是一项政治法律原则,但决不是一项凭有权人的好恶而可以任意废弃的政策。有关财产和财产权的制度安排是现代文明社会的一项基本制度,而不是领导者的权宜之计。财产权的界定与保障愈明晰有效,财富的强行再分配的难度就愈大。就算分配者是个平庸无能的独裁者,也难以对社会造成重大的损害。财产权越受到保障,损人利己的难度就越大。个人的财产权与自由市场经济不会自动带来民主,但没有财产权与市场,则绝对不会有民主。前者虽不是后者的全部条件,但却是必要条件。世界上还没有一个国家不承认财产权却实现了真正的民主。民主在人类文明中的昌盛与财产权的逐步确立是同步发生的。

    财产权的保障不仅需要民主,同样需要宪政、法治。财产权的确立还催生了法治。在没有财产权的时代,连法律都显得多余,更不用说研究如何用法律来保障财产权了。财产权是宪法与宪政所要保护的重点对象,没有对财产权的有效保护,也就没有宪政。人们联合成为国家和置身于政府管理之下的重大的和主要的目的,是保护他们的财产。

    主权者的“权力绝不容许扩张到超出公众福利的需要之外,而是必须保障每个人的财产”。政府唯一正当的、合乎道德的目的就是保护人的权利,即保护人的生命权、自由权和财产权。没有财产权,其他一切权利都必将落空。任何立法机关可以用多数票表决的方式剥夺公民财产权和基本自由的政体决不是自由政体。可以说,基于财产权对人的生存和人类文明的重要性,任何剥夺财产权和经济自由的法律即是即非正义的法律,是恶法。若财产权只停留在作为事实上的权利而不变成宪法和法律上的权利,就会导致统治者与有产者的无法无天。财产权把权利与自由赋予个人,把限制加诸国家,即为了保障财产权来限制国家的权力。所以,财产权事关政治正义。事实上,财产权本身就含有正义的观念。个人可以获得、占有任何他视之为有价值的东西的权利,而且这种权利对每个人是同等的。因此,广义上的财产权包括个人的选择自由、其人身的安全和自由、其才智的自由运用。只有公平地保护每个人的财产权的政治制度才是正义的政治制度。没有财产权,其他任何权利都不可能得到真正行使。

    只有市场经济和法治下的宪政民主才能把全面的、法律意义的财产权变成现实。在前市场经济社会只有事实上的、没有法理上的财产权利,即对财产的占有不是基于权利或法律,只是基于习惯和默许。财产权作为人的基本权利和人类文明的基石具有超法律的性质,人类不能制定毁灭人类文明自身的法律,因而不能制定消灭财产权的法律。对财产权的尊重应成为文明人的行动指南。财产权作为普遍的、平等的权利否定了财产的专有权。这意味著社会中的财产不能为一个人、一个家族、一家公司或公共权力机构垄断享有。个人可以享有专有权的对象只能是他的能力、他的劳动、他的运气。如果一切财产及其权力归于一,那么,奴役就近在眼前。所以,实行市场经济,就必须充分承认、尊重、保障属于每个人的财产权和经济自由;要想使财产权和经济自由得到充分保障,就必须用法律的手段对政府的性质、职能、权力、行为方式和规模进行严格的限制,即实行有限政府。

    总之,要实行市场经济,就把对财产权和经济自由的保障清清楚楚地写进宪法和法律里,落实在行动上,就要求一个权限与规模受到这些法律限制的有限的政府。

    二、公隐私开与私隐公开

    根据相关性原则:一切人类事务必须对相关者公开。以这一原则为准绳,可以把人类活动分成两大领域,一个是仅与自己或周围少数人相关的领域,即私人领域,发生在这一领域的是私人事务。一个是与一定地理区域内所有成员相关的领域,即公共领域,发生在这一领域的是公共事务,如国家大事。

    在人类和中国历史上的相当长的一段时期内,这两个领域并没有用法律规定明确的界限。往往是统治者的私凌驾于国家的公,国家的公又凌驾于臣民的私。个人在私人领域内的自主权得不到保障。私就是属于公,故必须对“公”公开。“公”是统治者的私事,天下的事也就是帝王的事,与普通的民众无关。

    在公与私的关系方面,用公隐私开来概括非市场社会,用私隐公开来概括市场社会,也许最恰当不过了。公隐私开的政治逻辑是,封闭的政治与无限的政府。私隐公开的政治逻辑是,开放的政治与有限的政府。私是公民个人的事情,只要自己知道就行。公共领域中的公共事务作则必须对所有的人“公”。为了防止以权谋私,统治者之私中的一部分(如个人收入)也必对公众“公”。私隐公开意味著政府应当尊重公民个人的“隐私”,公民则对公共事务享有知情权、监督权乃致参与权。公的领域是经常动用强制的领域,私的领域是自愿的领域。自由的历史就是抵制政府权力进入私人领域的历史,把政府的权力赶出私人领域的历史。

    长期以来占主导地位的公私观念一直把兴公灭私看作是国家富强的秘诀。于是,“私”被彻底逐出了政治经济制度、社会生活乃至语言文字。但其结果不是使得中国人更加崇公,反而更加重私;不是使中国变得更加富强,反而使中国更加贫穷,并最终迫使中国走上了市场经济的改革道路。市场经济的出现彻底改变了传统的自然经济和计划经济下的公私观念。市场经济完全承认个人追求“私利”的权利,它不要求牺牲人的正当利益。

    传统的尊公灭私的公私观之所以注定行不通,就在于公与私的关系不是势不两立的。然而,公私也不是二元平等的,而是以私为依托的。两者不是谁消灭谁的问题,而是相互协调的问题。既然每个个人都对自己的生存承担了不可取代的责任,他就有权利为自己的生存谋取必要的利益。公的重要,不在于抹煞私人利益及取缔属于私人事务的领域,而是在于它能代表众人之私,实现众人之私。背离众人之私的“公益”只能是一己之私。故公来自私,私是公的本位。这也正是公民应当享有参政权和议政权的正当性来源。应当承认,公私之间会存在某种冲突,甚至是剧烈的冲突。即便如此,对公主要的威胁是统治集团的自私,不是普通个人的自私。

    市场经济的确立改变了公私两个领域之间公私不分、以公压私、化公为私的界限模糊的状态,为私人领域从公共领域的分离与独立提供的必要的前提。市场经济的正当性、可行性来源于它认为人是追求自身利益的动物,并完全承认个人追求“私利”的权利。承认“我”与“私”的正当性是约束“私”泛滥与“我”膨胀的最有效、最正当的途径。市场经济意味著市场中的商业行为要依据法律,更重要的是政府行为也必须依据法律。市场经济的相对独立性基于公私的区分,公共权力的作用应该被严格地限定在公共领域;而且在私人生活方面,个人通过各种联合和结社,基本上可以管理好自己的日常事务。国家不能代替个人处理私人事务。例如,不能通过宪法或法律规定,谁与谁应该结婚,或是谁应该抽某个牌子的香烟。立宪国家不应介入公民的道德事务,不能逼迫人们去追求美德,不能规定及强制实行某个道德目标。宪法、共和都是旨在解决公共领域的问题,而不是规定和控制纯私人性的行为。

    市场经济为公民提供了经济上的独立以免受国家权力的绝对支配。公共利益是在特定的制度架构内追求个人利益的产物。私益之和便是公益。但是掌握公共权力的人所刻意追求的私益之和,却未必是公益。而刻意追求公益的结果往往只会有益于特殊利益。在自由的市场之下,私人的利益会造就公共利益。促进公共利益往往是政府扩大其权力和规模所援引的理由,但这会瓦解正常的市场秩序。公益只能是私益的和谐组合,脱离了私益便无公益。国家只是公民的集合,除公民的个人利益,国家自己没有特殊的利益。所以,公共利益要求的是限制政府权力的作用和范围,而不是相反。国家在经济方面的权力不受限制,就不免会破坏市场秩序的自主与完整。宪法正是勘定国家权力的界限以确保其不被逾越的最权威、最有效的工具和手段。也只有具备了上述的必要和充分条件,才能解放和保护个人及社会创造财富的能力,营造出最适合经济发展和财富增值的政治制度环境。

    那么,在市场经济下,怎样划分公与私的界线呢?对每个人来讲,“私”包括个人自由和私人领域。个人自由又包括人身自由和经济自由。经济自由即追求财富、创造财富的自由,也就是谋利的自由。而私人领域由私人自主支配的空间构成,它的存在是要为个人追求其正当的的利益造就一个受保护的空间。而涉及每个成员的利益的公共事务及其管理就构成了公共领域。它是为了实现私而出现的,它是私的派生。公的确象黄金一样可贵,但私却象粮食一样必不可少。黄金之所以可贵,就在于它在必要时能换来大量的粮食。公之所以有价值,就在于它能服务于众人的利益。公益要么作为私利之和,要么作为实现少数人之私利的工具。公益的立足点在于在公私利害之一致。一旦为公就须废私,为私不免害公,最后公私两亡。前苏联社会主义国家的解体就是有公无私的后果。

    政治只发生在公的领域,及公共机构如政府、政党,而不发生在私人领域,如家庭、人际关系、市场等。政治进入私人领域就会造成泛政治化和权力、职能、规模及行为方式不受限制的政府,如“文革”期间。公共领域与私人领域之间的区分合乎于国家与社会之间的分野。国家是由公共权力机构组成,靠公众的税收来维持的。政治是一项应该受到严格限制的活动,即管理受到严格界定的公共事务。社会则是由非公共性自治团体组成的。其在性质上之所以是私的,是因为这些组织的建立是为了满足一些公民个人的需要,由自己负担的,而不是服务于全社会的目的。在这种“公-私”二分法的基础上,政府行动的范围与责任被严格地限制在公共领域。在那些公民能够自我管理的领域,如经济、社会、家庭、人身、文化艺术、宗教、伦理道德、个人嗜好与审美偏好等属于私人领域,因而是非公共的、非政治的、私人的,政府则不能随意插手。

    在政治领域,传统政治哲学认为,好的体制拥有献身于公共利益的统治者,而坏体制则造就以权谋私的统治者。现代政治哲学认为,一个好的体制具有适当的制度化机制,既能满足、又能控制那些自私的人们,而坏的体制则无法做到这一点。“私人领域”是人生中最重要的价值得以实现的领域。在纯粹的私人领域,公民有“隐藏”私人秘密的权利,公共权力不应过问。促进公共利益往往是政府扩大其权利和规模所援引的理由。对公民个人利益的保障则必然要求对公共权力加以必要的、有效的限制。可见,对“私”的承认必然要导致对政府的权力、职能、规模和行为方式上作出实质性的、明确的限制。私可隐,公要开。公共事务的处理要向民众公开,公共职位的产生要向社会开放,公共权力要接受社会的监督。

    公开与透明,是有限政府的基本要素,是对政府的有效限制,从而使非法、不当的政府行为无从藏身。所以,公共事务的是否公开透明,对市场经济的正常运转是必不可少的。公共权力部门能否提供充分可靠的信息,以及其决策是否有决策充分的透明度,这两者对责任制度和法治至关重要。没有充分的信息和透明度就为欺诈、不公平的待遇和腐败提供了机会。是否能获得准确的信息严重地影响到企业的效率和竞争能力。只有市场活动的参与者能够获得充分的信息,才能维持一个竞争性的市场经济。有关经济的情报、有关特定市场的状况、有关政府的意图和行动对企业计算风险和潜在的回报都关系到企业的成败。透明度则改进了市场信息的传播和准确性,降低了交易成本,是经济效率的关键所在,也是使政府更负责及制止腐败的有效途径,是使市场免受任意干预的有效手段,使得政府更多地依靠市场机制来进行经济管理。对经济发展的有效管理,不仅限于对国有企业的有效管理,而且涉及到制度和规则,其作用是为公共和私有企业的行动提供一个可预期的透明的架构。

    在经济领域,实行公平、充分的竞争,取消多余的管制,使规则和制度高度透明化是理所当然的。许多国家在反腐败方面都有复杂而严格的法律,但是这些规则难以实施,因为许多私下的、内部的规定还没有公开。

    在发展中国家,预算往往缺少透明度,许多税收项目在预算之外,而且许多支出也未被列入预算,如军费支出常常得不到立法机关的审查。充分的信息和较高的透明度可以降低不确定性和费用,但是自身也会带来更大的责任。如果会计、审计制度软弱无力,预算不能得到有效的实施和监督,加上不严格的、不透明的、不受监督的批文或采购制度加剧了腐败,导致公共投资使用不当。在这方面,公共舆论可发挥重要的监督作用。

    信息现在已经成为决定社会和经济变迁步伐的关键因素之一。竞争性的市场经济通常要求经济行动者能够获得相关的、及时的和可靠的信息。信息越难获得,可信度越低,那么不确定性和风险就越大,因此,就会造成资金和人力的损失与浪费。

    在所有国家中,政府都是最主要的信息来源。有关于经济状况的某种特定的市场状况以及有关于政府政策和意向的信息对于投资者对风险的计算都极具参考价值,而且这些信息要么由政府提供,要么也是应民间要求才会公布于众。政府通常有正当的理由来隐瞒一些类型的信息,如关于涉及国家安全方面的经济信息,或会造成经济震汤的信息。重要信息的过早泄露会导致政府政策的失效,如官方对汇率的调整。除这些特殊情况外,由政府在以下三个方面提供充足的信息和更大的透明度将不无益处:一是有助于提高经济活动的效率效益,二是有助于预防腐败,三是在分析、计算和接受政策选择信息方面的具有不可或缺的重要性。

    信息与透明度还关系到经济效率。经济效率要求有关政府政策和行动的信息可供获得,而且经济决策的主要程序,例如预算都应该是相当透明的。经济效率也要求公众有机会对经济政策制定的过程发表评论,施加影响,当然最后一个方面受到特定国家的政治传统以及政治参与现况的限制。无论如何,扩大在政策制定方面的透明度对于提高经济效率十分重要。就与政府自身的关系而言,信息与透明度对改进与提高政府管理市场经济的水平关系更大。

    当在政府的决策不受审查、不可争论、不向社会公开的地方,腐败的危险、公共资源(包括外援)被滥用的可能性就会大大地增加,透明度不是控制腐败的充分因素,但是在多数情况下却是一个必要的因素。封闭的决策有助于增加政府决策失误的风险和出现负面反应的风险。若是在决策之前社会上有公开的和充分的讨论,那么,不仅会改进政策设计,而且也使得政策更容易被公众所接受。经济活动的效率和效益、市场的竞争性都要求有多种渠道来获得相关的信息。

    总之,公开私隐要求政府的活动范围只能局限在“公”的领域,不能任意进入私人领域。市场经济给政府规定的位置是仲裁人,政府的责任是公平、有效、和平地解决社会中的冲突。现代社会的发展,显得可供国家插手来干预人民私人生活的领域和借口越来越多。尽管国家是必要的,但要确保人民有能力自力而不致过度依赖国家。国家不过是社会的工具,国家的权力及其运用不能与公民的基本权利和自由相冲突。没有公私分立、私隐公开,就没有有限政府。

    三、实物名分与权利自由

    在人类社会从非市场社会向市场社会转变过程中,学者们常常归纳出这种转变过程中的一些特点,如德国社会学家滕尼斯称为是由礼俗社会向法理社会的转变。英国的法学家梅因认为,是由身份到契约的转变,上述两种转变也许可以部分地适用于中国,但我认为,有一种转变是中国所特有的,这就是由实物名分到权利自由的转变。

    例如,财产与财产权是两个完全不同的概念,在中国却很少有人提及它们之间的差别。财产是实实在在的东西,或者说,是实物。而财产权则是空空汤汤的权利。有财产的人未必有财产权,有财产权的人未必有财产。乍看起来,财产权好像完全是多余的东西,然而,财产权不论对那些有财产的人,或可能获得财产的人,或者说,对每个人都有著极其重要的意义。没有财产权,有了财产,也可能会丢掉。有了财产权,不论是已有的财产,还是在未来可能取得的财产都有了保障。按照名分的概念,占有财产的正当性不在于占有者是一个人,而是在于这个人的名义身份。当一个人的名义和身份改变了之后,他的财产也要或益或损了。“抄(没)家(产)”的概念最能说明这一点。当一个人的政治身份改变之后,如从权臣变成乱党之后,怎么剥夺他及其家人的财产、乃至生命不仅不过分,而且最正当不过了。所以,属于特定人的名分与属于每个人的权利和自由完全不是一回事,而后者正是中国有史以来所一直缺乏的。

    在传统的中国,没有权利的概念,只有“名分”,即名义与身份,它充其量只能算得上是一种初级的权利,根本不是每个人都有的根本的、不可让渡的、不可剥夺的权利。在中国的历史和文化传统中,根本就没有权利和自由的概念,即使是后来引进的“权利”概念也只是从具体的与实物有关的“利”来理解“权”,“权”能带来“利”。占有财产、对财产的权利不是绝对的权利,而是相对的权利,是由个人在社会关系中的名义和身份所决定的权利。这种权利不是由个人作为独立的、自主的人自身所享有的权利,而是由这个人的社会关系所决定的权利。所以,在中国,财产及其权利是一个历史的、社会的范畴,而不是一个法理的、逻辑的、规范性的范畴。直到本世纪之前,所有权这个概念在中国汉语的字典里是不存在的。即使在本世纪的相当一段时间内,所有权不仅不包含任何个人的权利,而且只专指国家拥有一切财产的权力。

    这种从实物的角度来理解权利的思路与原来作为“正当”的“权利”有著根本的不同。另一方面,在中国,权利和权力由于在发音和字形上的共同之处(相近之处),经常在使用中产生混淆,世界上的另外一些地方,权力与权利则是根本对立的,根本没有混淆的余地。一旦混淆,即意味著强权即是真理。相应地,在中国的传统中,法律基本上是惩罚和教育的工具,而不是界定和保护权利的工具。

    由于在中国的文化、政治和法律传统中没有权利的概念,所以,中国人身上有根深蒂固的重财产、轻财产权的观念,不知道用权利来保护自己的财产,也就没有财产权的概念。当一个人的财产受到、尤其是受到官家的侵害时,他无法、甚至放弃用权利来捍卫自己的财产,而是变著法、用另一种方式来补偿自己的财产损失。一个农民可能会在上午乖乖地把钱交给来摊派的村干部,然后,在夜晚,去盗割一段电线变卖之后来补偿自己上午的损失。如果这个农民有财产权的概念,如果财产权受到法律的保障,他就可以去抗拒村里的非法摊派来保护自己的财产,而用不著晚上去盗窃他人的财产来补偿。由于财产权概念的缺乏,在社会中出现了大量的财产受到非法侵害的受害者,而这些受害者同时又会用某种手段去侵害他人的财产。再比如,在目前,一方面,一些商人用钱去收买某些政府官员以换取商业上的利益,另一方面,他们又成为这些政府官员摊派索贿的对象,如果有了财产权的保障和公平自由的商业环境,它们既没有必要把钱花在收买政府的官员身上,同时又凭借著法律对财产权的保障来抗拒非法的索贿和摊派。

    中国人对实物的贪恋和对权利和自由的轻视决不仅止于财产,在权力问题上更是如此。如果说,贪恋财产而抛弃财产权的主要是农民和市民的话,那么,贪恋政治权力而放弃参政的权利则更常见于商人和知识分子群体中间。在中国,越来越多的新富们把大笔的钱花在跑官、行贿,或是试图影响政府的政策制定上,而很少考虑自己作为一个群体中的一员,以及作为一个堂堂正正的公民所应当具有的参政的权利。而学而优则仕则更是中国知识分子特有的中国特色。很多人作学问,并不是为了学问本身,也不是为了用学问服务于社会,而是拿学问作为换取政治权力的筹码。多少年以来,做帝王师是一代代中国高级知识分子的最高理想。为了达到这一梦想,他们不仅放弃自己的权利和自由,而且扭曲自己的观点和人格,甚至冒著杀身之祸的危险。如果让一个士人来选择是做私塾的先生,还是做帝王的教师,我不知道有多少人会选择后者,但这个比例一定很高,不过,在我看来,私塾的先生是站著的,帝王的教师是跪著的,至少在人格和心理上都是如此。

    与“抄家”概念相关的另一个概念是传统中国政治所特有的“招安”。“招安”是统治者拿作为实物的权力换取反叛者抵抗的权利,用牺牲一点点实物,如官位、薪俸换取王朝家天下的安泰,以致于真让人惊叹其商业头脑的精明和政治头脑的高明。“招安”的做法之所以每每收效,显然是在被招安者眼里实物比权利重要,从而使来自民间的限制政府权力的努力成功地化为乌有。而被招安者也从奖赏到的权力中洋洋得意。不难看出,长久以来,中国人对以实物名分换取自由权利的交易的合理性达成了高度的共识,而且都认为自己从中受益。如果历史可以重演,如果中国人把对财产、权力等实物的执著转换成对权利和自由的执著,那么,我不知道中国今天是个什么样子。

    由于贪恋实物而放弃了自己的财产权,同时也就意味著放弃了对别人的财产权的尊重。不尊重别人的财产权,非法占有他人的财产也许可以使自己一时富有起来,然而由于没有财产权,他不仅可能会丢掉从别人那里抢来的财产,也许连自己原来的家业也会赔上。正如我们后来所看到的那样,一个没有财产权的社会只能是一个财产极度匮乏、人人自危的社会。近现代的现实主义革命与以往的起义、叛乱、乌托邦革命有一个根本的区别。即这种革命的目的是争取属于每一个人的权利和自由,属于每一个人的财产权和经济自由。权利和自由是属于每个人私人的东西,不经过奋斗是不可能达到的。不为每个人取得包括财产权和经济自由在内的平等权利的革命,不是真正的革命。为达到争取同等的权利和自由的目的的革命是未竞的革命。以争取他人财富的“革命”至多是一场“起义”,或者是一场动乱。这样的“革命”的参加者也许会因为通过暴力手段获得他人的财富,但丧失的却是包括财产权和经济自由在内的基本权利和自由。土豪的家被抄了,田地被分了,其受益者也许会得到一些财产,但决不会成为巨富,当这些财产被消耗掉之后,或者被“公共化”之后,他也许比以前更穷了。在中国历史上,最有感召力和蛊惑力的口号就是去用暴力获得别人的财产,所谓“均贫富,等贵贱”。人们习惯于把革命的目的就是争取实物名分而不是争取自由、权利,是消灭个人财产权而不是相反。财富能争取到一点,但却以丧失财产权和经济自由为代价。所以,在中国,改革作为第二次革命的必要性就在于它的目标是争取包括财产权、参政权在内的权利和经济、政治方面的自由。

    探讨由实物名分向权利自由的转变有著极大的现实意义。对实物名分的注重显然是无限政府的重要基础,政府用实物和名分来换取社会放弃对政府无限扩张的倾向的抵制。而权利与自由是市场社会和有限政府的必然要求。没有这一转变就无法确立权利和自由,就无法权力有限政府,也就无法建社会。

    四、聪明的人与聪明的制度

    记得小时候常常读到,中华民族是勤劳、勇敢、智慧的民族。改革开放以后,随著大批的学子出国留学,中国人聪明的结论不断得到新的证据。许多人认为,中国人和犹太人是世界上两个最聪明的民族,此话绝非空口无凭。中国人有举世羡慕的商业才能,尤其是在中国以外的地方发挥得更为淋漓尽致。大至科学“大业”,中国的中学生们捧回了一座座奥林匹克竞赛奖的奖杯,海外的华人科学家也取得了一项项骄人的科学成就,乃致诺贝尔奖这样的殊荣也不乏有华人问津者。小至烹调“小艺”,尽管中国传统上是一个高度中央集权的单一制国家,但中国的饮食文化比任何联邦制国家的多元政治都更加丰富多彩,而且美味绝伦。更让中国人骄傲的是,是五千年不曾间断的中华文明,绵延不绝,举世无双。中国人没有非凡的智慧绝对不可能取得这些挂一漏万的成就。

    中国人的聪明似乎不容质疑。但是我们至少可以问一问,中国人是否在任何一方面都聪明,还是只是在一些领域聪明,在另一些领域不那么聪明。或者在一些领域有无数的小聪明,而不具备大智慧。如果中国人在每一方面都聪明绝顶,大智大觉的话,为什么中国人在近代长期被动、挨打,为什么长期跳不出充满暴力和血腥的治乱循环的怪圈?为什么经过漫长的五千年,中国至今仍是个发展中国家?而被只有几百年历史的国家,甚至几十年历史的国家在人均国民生产总值上远远地甩在后面?从上述问题看,中国人在聪明的同时一定还在另一些地方不够聪明,缺乏大智慧,甚至是十分糊涂。如果把这些领域找出来,至少对中国人重新认识自己的聪明是十分有益的。

    也许在这里很难把这些领域一一理遍,但至少从上面的由实物名分到权利自由的转变这一脉络中可以找到一些线索。我们不难发现,在以实物换权利、以名分换自由的交易中,普通的中国人贪了小便宜,耍了小聪明,吃了大亏,上了大当,而长期不自知。我个人以为,中国人的聪明更多的是体现在私生活中。在琴棋书画、在诗词歌赋、在饮食的制作中、在日常交往中。即便在这些领域,有些时候与其说聪明,不如说滑头;与其说聪明,不如说世故;与其说聪明,不如说犬儒;与其说聪明,不如说没有远见,缺乏大智慧。另一方面,在公共领域,中国人的聪明和智慧却有严重的欠缺。有时作贱到不把自己当人的程度。即使是知识分子在个人与国家的关系中,也更愿意把自己当作受他人所用的“才”,而没想到把自己当作自己的主人,自己支配自己的命运、自己是自己的目的、自己为自己而活著的个人。

    20年前,中国恢复了高考,其理由是“人才青黄不接,国家需要人才”,我也深为自己有机会能站出来让国家挑选感到骄傲,因被国家当成人才而感恩不尽。对“人才”的观念从没有任何质疑。20年后,当我从电视片中再次看到、听到恢复高考的这一理由时,我突然间产生了一种疑惑:如果国家不需要人才,那么,就可以不恢复高考吗?就不需要青年去学习、去受教育了吗?或者说,如果这一理由成立,如果受教育不是每个青年独立于国家的权利,如果国家感到人才充足或是过剩,或是培养的人才有问题,那么,就像曾经发生过的那样,高考就可以随时被堂堂正正地终止了吗?当时最流行的比喻是,“伯乐与千里马”。难道每个青年活著的目的就是去充当国家马厩中的“好马”吗?如果国家不需要“马”了,青年成为“马”的机会也就丧失了。如果自己把自己当马的话,别人根本就没有必要把你当人。这里国家被看成了至高无上的人格神,而作为人才的个人不过是供其骑乘的好马。然而,如果个人仅仅是“国家”(其实是统治者)的工具,那么个人的自由、尊要好人格怎能得到保障?这种以国家的需要为最高的需要,以国家的理由为最高的理由的这种国家主义观念早在数世纪前就已被驳得体无完肤,而在今天的中国仍在大行其道。如果20年前这一观念无可厚非的话,那么,我们今天还能如此坦然地重述、坚持这一观念吗?如果个人仅仅是抽象“国家”的工具,有限的政府还有可能吗?还有必要吗?

    也许中国人真的聪明、智慧。但是遗憾的是,长期以来,很少有人把这种聪明和智慧大规模地集中用于去探索建立有限政府的途径。也许在另外一些地方,人们远不如中国人精明,但是,他们把最稀缺的智慧用在了最宝贵的地方。早在公元前的世纪,古希腊的智慧就发现,享有绝对权力的政府是变态的政体,靠用政府的力量来消灭私人财产来实现正义的想法是愚蠢的念头。早在13世纪,就找到了用法律来限制王权、在17、18世纪的旧大陆和新大陆的一些国家实现了市场经济及与之相配套的有限政府。而在离21世纪还有短短几年的今天,我们仍然在为是否要实行市场经济争论不休。连那些最坚定的拥护市场经济的人在鼓吹市场经济的时候也不得不支支吾吾、吞吞吐吐,谈到财产权和经济自由时,更是腰不直、气不壮。由于中国人在一些最重要的领域没有表现出大智慧,落后的中国与聪明的中国人之间的尴尬就毫不令人惊讶了。

    中国人向来以精于商业核算著称。从历史上看,中国人的政治头脑也不简单。尤其擅长钻营与厚黑。但是,对不同政治制度的不同成本却从未用其商业头脑作过认真周密地核算,以致世世代代吃尽无穷的苦头、付出无尽的代价而不自知。在本世纪30年代,《吾土与吾民》的作者林语堂先生就指出,中国人只期待仁慈的领袖而不关心构建捍卫其权利与自由的制度,以致于有千千万万这样的事例:“人民围著一位刚刚离任的,坐在轿子中的长官,跪在地上,眼里浸满了感激的泪水。这就是中国人感恩戴德最好的证明,是中国官吏所施恩惠的最好例子。人民只知道这是恩惠,不知道这是中国官吏们应该做的事。”他还发现中国人对无限政府与暴政的宽容与耐心就像中国的景泰蓝一样举世无双。不知道这种宽容与耐心是出自大度,还是出自无知。如果是出自大度,为什么一向斤斤计较的人在这一方面却反于常态;如果是无知的话,又怎么能说中国人聪明?如果中国人真的聪明的话,为什么不关心政治,不关心政治正义?为什么不在意自由与权利,只关心没有权利便朝夕不保的财产与权力?为什么不去探索能够发挥而不是压制所有中国人聪明才智的社会政治经济制度?

    在聪明与愚笨、人与制度之间有一些常被人们忽略的重要搭配。有愚笨的人与高明的制度相搭配,也有聪明的人与低劣的制度相搭配。当然,最好的搭配是聪明的人与高明的制度相搭配,最坏的搭配则是愚笨的人与低劣的制度相搭配。在中国,人与制度的搭配虽不是最坏的,但也绝不是最好的。如果最坏的搭配很容易避免,而最好的搭配又很难实现的话,那我个人以为,宁愿选择愚笨的人与高明的制度之间的搭配。以对待聪明的态度来衡量,愚笨的制度是那些让个别人的聪明才智压过所有人的聪明才智的制度,中国有一句形象的说法用于形容这种制度最恰当不过:“武大郎开店”。高明的制度是那些让每一个似乎是不太高明的普通人把自己的才智都充分地发挥出来的制度。如此看来,人的聪明与愚笨远远不如制度的高明与低劣重要。再聪明的民族一旦这种聪明才智被压制了,或者在最重要的方面没有表现出来,这种聪明如果不是形同虚设的话,那么,也只是聊胜于无。而在高明的制度下,不管人聪明与否,若能把仅有的才智充分调动出来,倒也蔚为可观,受益良多。如果中国人真的聪明,必须拿出最重要的证据来,这就是演化出一套高明的制度。聪明的最重要的表现应当是善于把稀缺的智慧用在制度的刀刃上。有限政府则是迄今为止被人类的智慧所发现的,最为高明的政治制度。

    五、无限政府与治乱循环

    所谓无限政府(Unlimited Government)是指一个政府自身在规模、职能、权力和行为方式上具有无限扩张、不受有效法律和社会制约的倾向。有人可能会说,绝对的无限政府是不存在的,任何专制的政府至少要受到一些自然规律的影响,如领导人受生老病死的制约,受家人与权臣的挚肘,以及来自民间的武装叛乱的挑战。但是,即使是自然规律也无法有效地遏制无限政府的扩张倾向。这种倾向直到它被新的政权所取代之前其膨胀的趋势不会中止。所以,这里的无限政府不是指一个政府受不受自然规律的约束,或能否彻底杜绝民间的反抗。判断有限政府与无限政府的尺度在于一个政府,或者说一个政权在权力、职能规模上是否受到来自法律的明文限制;是否公开愿意接受社会的监督与制约;政府的权力和规模在越出其法定疆界时,是否得到及时有效的纠正。

    无限政府首先表现在政府的权力不受来自下级的和独立的权力机构的约束,而只受上级主管的约束。在中国古代,皇帝的权力是最大的,最不受约束的,因为皇帝没有上级。皇帝之下的各级官员只受上一级的约束,而不受其统治对象的约束。所以,皇帝可以按照自己的意志随心所欲地行使自己的权力。当天高皇帝远的时候,各级官僚就按自己的意志行使权力。当县官不在的时候,现管就按照自己的意志独立地行使权力。

    政府职能的无限扩张,这表现为政府越来越多地承担本来完全可以由社会或市场自己去履行和完成的事情,或是把政府权力深入到纯粹属于个人生活的私人领域。这样使民间渐渐失去了管理自身生活、抵制政府插手的能力。权力的扩张与职能扩张的直接后果是属于私人的权利和自由不断缩小,财产权和经济自由不断受到侵犯。

    政府规模的无限扩张表现为政府机构越来越多,官员越来越多。政府的膨胀必然给社会的经济发展造成沉重的负担,使正常的经济活动受到严重的妨碍。这时,只有干政府官员的行业才是社会中永不亏损且一本万利的行业。于是,人们为了谋生存,想尽办法挤入官员的队伍。而政府的规模越庞大,社会的负担越重。政府规模越大,就越要从社会中提取大量的钱财,用民间有限的膏脂来养活无限膨胀的政府。结果换来的是最高的权力不受约束,而普通的官员则游行于利禄之中。

    在政府的膨胀过程中,官僚的腐败起著重大的作用,这是政府从自我膨胀到自我覆灭的重要原因。官僚们通常所关心的不是公益,而是如何去保护他们的工作及其机构的重要性。任何预算的消减,对他们都是威胁,预算的不断增加才是权力的源泉。这是他们个人的荣耀和权力的基础。任何官僚都有潜在腐败的倾向,他们总是倾向于在执行公务中满足自己的私利。从理论上讲,所有的政治领袖和官僚都是在对某种人负责。在许多情况下,只是对那些能够最大限度地保障他们个人利益的人负责。

    若是官员人数太多,就无法做到高薪养廉,这样中央和各级政府机构实际上就是官员的俱乐部。他们工资微薄,又人浮于事,就不择手段地设法增加额外的收入。最常见的方法就是利用职权寻租设租,甚至卖官鬻爵;机构谋求预算外收入,个人谋求工资外收入;利用职权设立关卡,索贿受贿。这样,中央政府就陷入了下面的税收困境:税率低,则税款不足,税率高则无法负担,结果造成税率越高,收税效率越低的两难。中央征税的力度越大,地方社会税务负担越重,而中央的税收则无明显增加。历史学家黄仁宇注意到,支持现代商业的法律程序以私人财产权作基础。在中国古代,这首先与孟子的道德观念相反,而后者正是奉官僚体系为天经地义。在低税率与高税率的两难中,政府为了维持自身的生存,只能义无反顾地选择后者。不仅如此,在开动脑筋之后,还发明了名目繁多的税外收费项目。由于存在著巨大的财政和税收的漏洞,中央政府为了不断加强自身的财政能力,不得不加大从民间提取的力度。这又为地方政府和官员搭车收费提供了良机。于是就形成以下的恶性循环:政府从民间提取资源的力度越来越大,而国库本身却越来越空。制度的漏洞却越来越大,而官员的私囊却越来越饱。最后,只好竭泽而渔。

    中国历史上每一个王朝的终结无不与政府无限膨胀、普遍的贪污腐败和严重的财政危机联系在一起。每一个王朝的政府就像气球一样不断膨胀,一直到炸掉才划上句号。这时,取而代之的新政权从其建立之初的小规模、小权力、小职能开始,不断地向大处膨胀,最后重蹈上一个王朝的覆辙。每一次爆炸都伴随著巨大的社会动荡,是所谓“乱”;新政府的重现由于其最初的小规模,给社会造成的负担和压力不大,从而为社会的发展提供了契机,是所谓“治”。这种从小政府到因无限膨胀而崩溃、再到新的小政府出现的过程被视为治乱循环。有一些王朝的统治者比较明智,在政府膨胀到一定规模时,感到事情不妙,于是锐意改革,主动延缓或局部扭转政府膨胀的趋势,是谓“中兴”。当然,与每个王朝一样,在结局上并无二致。

    所以,一个国家、一个民族若是找不到一个有效的、持久的摆脱无限政府的制度安排,就无法跳出“治”与“乱”的恶性循环。在现代中国,政府在规模、权力上,膨胀的征候比比皆是。尽管在权力的高度集中上,比计划经济时代有明显的好转,但是,目前仍然存在著政府规模过大,官员过多,财政紧张加剧,从民间提取财富的力度过大,财产权和经济自由的行使空间受到极大限制等问题。幸好,市场经济的出现为我们实现从无限政府向有限政府的过渡提供了契机。如果我们把握住了市场经济的契机,找到了限制政府无限膨胀的、可行而有效的制度安排,那么,中国将从此摆脱“治”与“乱”的循环。否则的话,就不可能逃脱过去的历史所呈现的规律。

    无限政府的主要并发征之一,就是全面的经费短缺、财政紧张。因此,也每每有人建议让财政收入向中央倾斜,坚决加大中央从民间提取的力度,这样做似不仅与事无补,反而是饮鸩止渴。财政紧张的真正原因,不是政府的提取能力太弱,而是政府的摊子太大,各级官员的胃口太大,政府的扩展趋势蔓无节制。历代王朝在行将崩溃前,总是表现出以下的征候:在财政上,民众不能监督政府,政府不能监督自己。虽然提取的手段多,力度大,但政府得财有限,却伤民无穷,导致下面的民众感到喘不过来气,而国库的收入则不足预期的数量,乃至财政税收山穷水尽。最后由于政府规模、权限的无限制扩张,吞食了作为其基础的社会机体,最终以崩溃告终。除非政府的权力受到法律的限制,民众的权利受到法律的保护,否则,对民间的征敛必然趋向漫无节制,政府可以以中央财政收入的比重的过低的名义,通过加大向民间的提取力度,使财富向中央政府倾斜,但其后果政府也难以担负。

    无限的政府所导致的治乱的循环其受害者不仅是平民百姓,而且是统治者自身。在中国历史上,没有一个末代皇帝不尝尽无限政府给他们酿成的苦果。从秦二世,到明崇祯,到清溥仪,无有例外者。对任何王族来说,无限政府与万世一系,不可得兼。所以,有限政府的诉求绝不是民间有意与政府作对。正是无限政府才导致了“君子之泽,五世而斩”。限政的政治逻辑不是无政府主义的政治逻辑,它并不是为限政而限政,而只是要求政府的权力受到限制。限政可以帮助统治者免除末世的厄运,可以帮助老百姓免除苛政的压榨。所以,为官者与为民者都没有理由拒绝它。不受限制的政府未必对统治者有利。当肢体过度肥大的时候,中枢对肢体各部分的控制程度,就必然大幅下降,酿成权威危机。若用《贞观政要》里的比喻来分析:如果政权与民众是舟与水的关系,无限政府的做法是通过经年累月的努力把船制作得与水域面积一样大,并把船外的水都设法抽到船里面来,其后果可想而知。有限政府的做法是,在“水域”面积固定的情况下,尽可能把船制作得小些,这样船驰骋的余地就大些,尽量把水留在船外,这样船搁浅与倾覆的可能性就低一些。可见,有限政府于水无损,于舟有益。无限政府会导致政府的倾覆,这肯定既非统治者的本意,也不合乎统治者的长远利益。若考虑到被统治者的利益,无限政府更是有害。所以,摆脱“治”与“乱”的循环,关键是由“无限政府”到“有限政府”的转变。而市场经济在中国的确立为这一转变的实现提供了空前有利的契机。

    六、限政的理由与限政的方式

    政府的权力之所以要受到限制,有限政府之所以要取代取代无限政府,是由以下几个因素决定的:人性;不可避免的无知;政府的逻辑与政府的目的;市场的逻辑。

    人性

    由凡人组成的人类社会永远不可能达到至善尽美的境界,因而不要指望通过政府、国家和政治家的努力来达到这种境界,政治的作用与人自身一样都是十分有限的。任何权力总有一种要冲破现有限制的冲动,任何掌权者也总是企盼获得更大的权力,这一现实激发了相应的有限政府的必要。政府的权力必须受到限制,因为掌权者的权力总是趋向于腐败。所以,市场经济之下,最令人特别担心权力的集中。不仅担心政府权力的集中,而且担心经济和社会权力的集中,赋予政府履行其基本职能之外的任何权力都是极端危险的。人们要牢记这样一个事实:政府的权力是必需的,但这样的权力本身又是危险的。最佳的政府应该是最适合人的本性的政府,即它能够压制人性中最坏的可能,调动、鼓励人性中最好的东西。

    基于对人的本性上的局限性,有关政府的主要问题是,政府应该强大到足以去作它该作的事情,但又不能强大到去危及自由。而只有有限的政府才能较好地解决这一难题。

    不可避免的无知

    市场经济之所以优于计划经济是基于一个重要的事实,即人类的无知,限政的必要也正是来自人的不可避免的无知。无限的、全能政府不承认由凡人所组成的政府同样有不可克服的无知的一面。在现实中,把社会中的资源统归给一个单一的政治实体(通常是政府)来分配,并作出经济决策,就会出现知识短缺和知识传递上的问题。政府必须为稀缺的知识找到一个效率最高的用途。政府要想成功地解决这一问题就必需拥有大量的知识,而且必需拥有它在事实上不可能拥有的全部知识。政府把资源分配到不同的用途之前,还务必首先要明确这些用途是什么。面对这些不可克服的无知,政府在决策时的主观片面就在所难免。所以大部分行业和资源,一旦完全为政府所支配,其畏缩和枯竭就成了必然的结果。所以,对粮票管制得越严,就意味著大米越少;政府的任意干预越少,经济发展的步伐就越快。这虽不合乎理想,但在一定时期内,却是活生生的事实。依据无知论,政府则应尽可能地把决策权分散开来。否则企图去集中不能集中的知识,被集中起来的实质上就有可能是无知。政府的决定很可能是在信息和知识不充分的条件下作出的。作出的决策越大,其危险可能就越大。

    基于无知的不可避免性,没有任何权力中枢能够充分掌握分散在个人手中的全部知识。若是剥夺个人使用这种知识的机会就会因此限制这种知识所可能带来的好处,从而不仅给个人而且也会给公众造成损失。所以,只有在没有统一目标的秩序中的人才是自由的。若是某一秩序把公共目标强加给个人并追求这一目标,就只有把个人变成秩序机器上被指定部位的零部件,这样也就根本谈不上个人的自由了,也就妨碍到个人创造财富的积极性。而市场经济除了其经济职能外,还最佳利用了人类最稀缺的资源:知识,并通过赋予人们以选择和创造的自由,宝贵的知识才得以成为宝贵的财富。政府既然不是全知的,当然也就不是全能的。既然政府不是全能的,政府的权力、职能和规模就必须受到严格的限制。

    政府的逻辑与政府的目的

    政府必须受到限制在很大程度上是由政府自身的逻辑及人类建立政府的目的地所决定的。作为国家之代表的政府的行为是以公共利益和维持政权为依归,不可能按照利润最大化准则来运用资金。若是政府的权力,包括财权得不到法律和立法上的有力监督,必将导致社会财富非法流入官吏腰包,最终形成这样一种局面:政府提取民间财富的能力越强,支配财富的效益就越差;政府从民间提取的财富越多,对社会财富的浪费就越多。计划经济国家的能力最强,但经济发展的记录最糟。如经济学家密尔顿•弗里德曼所挖苦的那样,如果让政府去负责撒哈拉沙漠,不出5年,沙子就会短缺。在制造短缺的计划经济下生活过的人都知道,上述形容算不上夸张。所以,主张强化国家的能力应实现对国家权力的有效约束。也就是说,加强国家能力无论如何不能成为凌驾于其他一切之上的目标,而且即使作为一种手段使用起来也应当非常谨慎,对国家能力的强调要非常小心。“人类在心智上的限制决定了政府在控制和预测事件能力上的限制。”中国大跃进的经济绩效证明了任何试图超越人类心智之政治实践、使国家能力最大化所可能带来的恶劣后果。

    此外,政府的强制减少了自由,而自由本身就是免受政府约束的状态。而且,是公民个人,包括企业家,而不是政府最知道把他们的钱投到什么地方最明智。若这些钱由政府以税收的形式拿去投资,既造成中间环节的流失,又造成投资不当、重复引进、重复上马的胡子工程。这些都是政府不当投资行为造成的严重浪费,且不说还有大量的钱财用于维持官僚队伍,乃至中饱官僚私囊。

    国家没有、也不应负有实现至善的使命,因而就不应使其能力和权力过于庞大。政治是一项具体且有限的活动,它要求政府在使用其权力时经济而有效,在影响的范围上要受到限制。政府的作用就是执行游戏规则,就像体育运动中的裁判员与运动员不能兼二任于一身一样。这些规则又反过来限制了政府的权力,构成防止任意误用权力的法律依据。这样就可以使民众的自由得到保障,而正是这样的自由才使得个人按照自己的意图选择合适的生活方式。所以,如无必要,它的权力不仅不应增加,而且要用限政的剃刀把多余的权力剃掉。要使国家和政府有所作为的最好办法就是对国家和政府的权力和能力加以必要的限制。没有限制的权力必然要导致对权力的滥用,从而败坏了国家的能力。 政府总是要服务于一定的道德目的,它不能违反基本的道德律。根据基本的道德律,生命是神圣的,自由是珍贵的,财产的个人占有是正当而必不可少的。所以根据这一道德律,伤害人的生命是违法的,是犯罪;剥夺人的自由是犯罪;盗窃他人的财产也是犯罪。同样,政府的基本职能也必须符合这一道德律,即用法律的手段保护公民的生命、自由和财产免遭伤害。既然公民享有属于自己的自由来求生,来追求幸福,来获得物质财富,那么,政府就不应该把国家的目标和理想强加给个人,国家的蓝图、社会的目标不应凌驾于个人的追求之上。一个合理的政府理所当然地是有限的政府。

    市场的逻辑

    自由市场经济是有效而公平的,因为它是自然而必然的。说它自然是因为市场经济满足了人类渴求财富的愿望,市场的法则是自然的法则,自由市场经济自身固然有许多的弊害,但是没有它人类将遭受更大的困苦,市场经济通过自愿的交易,维持了社会的安定,从而大大缩小了强制力的范围。说它是必然的,因为没有外在的强力制止下,会自发地形成自由的市场。

    市场与政府都不完善,政府比市场更不完善。政府的作用只能限于弥补市场的不足,而决不是取市场而代之。政府不是万能的,也不可能是万能的,更不应该是万能的。政府不应插手私人领域的个人事务,即使是政府管得了的事,也不应让政府管。只有在自己(或社会自身)管不了时,才能动用政府。

    自由市场经济能够限制国家的权力,而计划经济则扩大国家的权力。自由市场经济造就了一个庞大的免受政府干预的生活空间,从而保留了自由的条件与环境。正是有了这样的财产和权利才使得那些不同于流行的意见的人能有立足之地。没有属于私人的财产和财产权,在一个社会中就很难听到反对的声音。财产与自由是密不可分的。经济上的平等不是经济进步,财产与私人占有分离,自由就失去了根基。

    自由市场经济是人性在经济方面最恰当的表达。所以,斯密说,市场经济是合乎自然与人性的、天然的自由制度。自由市场经济最有效地满足了每个人通过占有来维持自己生存的欲望,而其他的经济体制都无视这一欲望,甚至彻底否定这一欲望,从而带来人性的扭曲、经济的倒退、物质的匮乏。

    自由市场经济之所以成为当今最普遍的、唯一可行的经济形式,是因为它是人们经过漫长的探索和积累所得到的最契合人之本性的经济体制,市场经济超越国境的可行性也恰恰证明了普遍的和不变的人性。自由市场经济也最契合人的有限理性,因为它可以自发地运转、自动地配置、自动地调节,而不需要人的全知、全能。计划经济是建立在计划者的全知全能的假定之上,由于这样的人不存在,无限的理性不存在,这样的经济体制就注定要破产。没有人能够驾驭如此复杂的市场经济,所以就要反对任何企图驾驭这一经济的努力,尤其是防止以驾驭市场的名义来把经济送入由政府的权力构成的鸟笼之中。所以,自由市场经济的政治含义就是政府与经济的分离,其政治前提是政府不插手民间的经济事务。没有权力受到限制的政府就没有自由的市场经济。市场经济与有限政府是一对特殊的双胞胎,它们要么双双问世,要么双双离去。这里,没有侥幸、没有折中、没有幻想。

    在限政的方式上,从经济方面看,一个庞大的、繁荣的、稳定的、有序的市场经济的存在本身就是对政府的权力扩张的最有效的限制。政府与市场都需要独立的生存空间。在一国内,政府的空间与市场的空间基本上是零和格局,政府多一份,市场就少一份,反之亦然。一个自由竞争的繁荣的市场经济,在社会中造就了无数个由小到大的、以小为主的经济和社会权力中心,从而阻止了政治权力向中央的集中。市场经济的扩展,必须与对政府的权力、职能和规模的限制同时进行,否则市场秩序就没有社会空间。有限政府是市场经济的政治表达。

    在法律方面,宪法和法律承认并保障每个个人的财产权、经济自由以及由此派生出来的政治权力和经济权力,惩罚来自政府机关和民间对公民的经济自由和财产权的侵害。产权获得保障,私人财产权的稳步巩固是阻挡政府无限扩张的有效障碍。限政有赖于私人权利的扩张和政府权力及范围的缩小。从某种意义上讲,“宪政”就是“限政”,即政府的权力受到宪法和法律严格限制的政治体制。

    在政治文化方面,限政还依赖于高度自觉的公民意识(权利意识、纳税人意识、参政议政督政意识),依赖于公民养成自觉抵制政府越权、越界的习惯,自觉监督政府对纳税人所承担的责任,认识到政府的职责不是授予幸福,而是让每个人有机会找到自己的幸福。最好的政府,是协助我们自主管理的政府。

    在政治制度方面,宪法和法律必须给政府的行动范围划上明确的界限,对政府的权力进行纵向的和横向的分立,使其相互制衡。同时,实行法治,通过公平、有效、独立的司法,以确保个人的权利和自由,确保政府没有逾越其特定的行动范围。建立由作为纳税人的公民的代表按公平、自由、公开竞争的方式产生的代表机构进行参政议政督政,以确保政府的行动符合纳税人和所有公民的利益;确保政府尊重并保护公民的财产权;经济自由等基本权利,确保政府的税收和其它财政收入“取之于民,用之于民”;杜绝政府对社会进行横征暴敛、无度提取、与民争利,通过有效的监督,使政府不逾越其行动范围。

    对有限政府的落实和维护,除依靠外在的有效监督外,政府及其官员也要主动地尊重个人的权利和自由,恪守对自身的行动范围的限制,自觉地约束自身的权力和规模。

    在市场经济确立之后,与过去的计划经济时代相比,政府与经济事务的关系须有根本性的改变。在市场经济下有必要对政府进行严格的限制。政府在处理其自身与市场的关系时,应该采取对市场更为友善的态度。当市场中出现问题时,政府的补救作用是为了帮助市场发挥其作用,而不是取代市场。保护个人自由的根本途径是依赖自由市场经济和对政府扩张倾向的有效限制。

    不仅市场会失灵,而且政府也会失灵。市场是内在稳定的,而且可以自我平衡。它一般不需要干预。政府之所以会失灵,还因为人的权力欲在政治中会变得不受约束,以及由此而高度集中起来的政治权力。市场在性质上不同于政府。自由的市场能够产生自发的秩序,市场不会强制人,效率和效益也都极高,且带来合作。市场的失灵往往是由政府的不当政策造成的,而且由此产生要求政府进一步干预以挽救市场失灵的呼声。政府的首要责任是促进市场的发育,保护自发的市场秩序以使之免受强制和欺诈之害,保护产权,确保民间契约的履行,维护一个自发市场得以运转的和平安宁的环境。

    政府在经济管理中角色不当,若严重到一定程度就会产生一种对发展极为不利的环境。在这种环境中,政府对其人民的权威就会受到轻视。其结果是人们倾向于服从政府的决定和管制措施,政府又反过来趋向用强制的行政手段来解决问题。这不仅造成政治上的不稳定,而且经济上的代价也十分高昂,包括把宝贵的资源过多的用于维持国内的安定,或消耗于不断升级的腐败。政府的权力任意越界可能会进一步侵蚀到公民对其政府的信心,引起政府采取更不明智的行动,这使得政府干预行为的后果更差,同时也严重地制约了市场经济的发展。

    市场经济与有限政府的建立必须伴随著在治国方式上由政策治国向制度治国的转变。政策治国是指在处理社会、经济、政治等公共事务时主要以政策而不是借助制度和法律为主要的施政手段,通常流行于非市场经济的体制中。政策治国有其自身的利弊。其优势是使政府容易作出灵活的反映,而且执行起来迅速、高效、果断,不仅可以不受以往政策的约束,甚至可以轻而易举地冲破任何现行的法律的羁拌。其不足是:法治阙如,法制薄弱,机构庞杂,裁量权过度,弹性过大,放乱收死,政策决定可以任意更改,权大于法,以言代法,社会经济上搞指标管理,用行政手段干预具体经济活动,政治制度化程度低。由于权力不受制度约束,上级的政策易受到下级对策的抵制。政策治国的另一缺陷是由于缺少制度上的纠错机制,一旦政策不对路,实施的效率越高,不良的后果便越发严重。

    政策治国的经济基础是计划经济,政治基础是高度的中央集权。所以,政策治国的实践不适合市场经济的需要。比较适合市场经济的治国之道是制度治国,即主要依靠制度和法律来治理国家。政策治国并不意味著完全排斥制度。制度治国也并不意味著完全不借助政策。只是在这两种制度模式之下,政策与制度各自所扮演的角色不同,政策与制度的关系不同。值得注意的是,经济与政治之间存在著某种鲜为人知的悖反:经济活动天然地要求限制政府;政治活动要求加强权力,以完成政治家的目标。所以,政策治国必然带来政府的无限扩展。

    在政策治国的模式下,政策凌驾于法律和制度之上,并可根据前者的需要对后者作任意的修改。在制度治国的模式下,法律与制度高于政策,后者不得逾越前者为其划定的界限。这两种治国模式的差异还有点类似“人治”与“法治”的区别。事实上,政策治国是“人治”的主要标志,而制度治国则是“法治”的必然要求。若以是效率为政府行为的第一诉求,制度治国可能不及政策治国。但是由于受到制度和法律的约束,靠制度治国不太容易出错,尤其是不出大错,即使是出了错也比较容易得到纠正。况且,靠制度治国,权力受到约束,政策变化的幅度不会太大,这就为经济的发展提供了稳定适宜的政治制度环境。所以,可以说制度治国是市场经济的必然要求。

    制度治国的核心内容是政府(管理经济)行为的高度制度化,尤其是政府决策行为的高度制度化。与制度治国一样,“制度化”与“法治”是一致的,制度化不仅要求法律制定的正规化和民主化,而且要求人们遵守和执行这些法律规章。它涉及到授予某些政府机构以一定的功能和权威(如立法机关),又要求人们遵守这种权威。它把正式的决策摆在十分重要的地位以保证决策按照这种正式的程序持续地进行下去。

    制度化的目标并不是实现制度化本身,而是要使制度化的政治制度来促进社会的现代化和经济发展。只有政治生活高度制度化才能保证政治稳定,经济增长也更快,从而使整个社会能够尽量保持稳定、高速、协调地发展。制度治国是法治的必然要求。如果决策者在决策时不遵守法律规范,他们就可以为所欲为,就会对市场经济构成危害。

    制度化要求决策者尊重和履行法律规定的制度,即要求决策体制和决策行为的制度化,要求把低组织化的和非正式的决策变成高度正规化的和有组织的决策。它与统治者凌驾于法律之上、并任意废置法律的“人治”是相对立的。决策的制度化意味著法律应该由规定的机构、按照规定的方式、在规定的范围内不断制定、修订、实施和调整。制度化的关键并不仅仅在于有了现成的宪法法律,更在于整个社会从上至下具有遵守这些法律和制度的观念。在决策行为中形成一种周期发生的行为模式之后,人们就可以相对地预测决策者的行为了,因此,也有助于国家的政治和经济安定。

    有限的政府要求在制度层次上创立一个中性的现代国家;在经济层面上,维持一个充分自由的私人领域。政府对各种具体的利益争夺应保持中性的立场。政府必须提供规则以使市场得以运转,保护财产权,以及对规则的有效执行来维持稳定的商业环境以增进投资的成功

    总之,妨碍政府驾驭市场及管好经济事务的关键是政府的制度能力,因此,有限政府的实现取决于制度建设与制度创新,取决于由政策治国转向制度治国的决心和效果。另一方面,注重制度必然要关心制度环境。没有适宜的环境,制度不可能发生有效的作用。没有制度,政策不可能得到有效的推行。既然由非市场经济向市场经济、由无限政府向有限政府的转变是不可避免的,那么,在治国方式上由政策治国向制度治国的转变也是不可避免的。

    无限政府与有限政府的重大差异在腐败现象上也展现得十分鲜明。在无限政府下,腐败之所以泛滥,是由制度上的根本缺陷造成的,所以,这样的腐败,又被称为结构性腐败。所谓制度上的缺陷就是对权力没有监督,没有限制。这样的腐败通常都伴随著在社会中普遍流行的认同腐败的腐败文化。即当民众与政府官员打交道时,他需假定官员是腐败的,并以相应的手段对付这样的官员。如果他假定官员是廉洁的,一旦碰到的是腐败的官员,他所要办的事就一定会告吹。而对官员的腐败假定,却可以确保万无一失。所以,提“钱”办事便是与官员打交道的最重要的公开秘诀。久而久之,便无官不腐。如果只允许我用两个字来定义无限政府,尤其是定义中国历史上出现过的无限政府,“鲸吞”这两个字最恰当不过了。这便是中国特有的说法。一切权谋、一切勾当、一切交易、一切血腥无非是为了“鲸吞”这两个字。

    在有限政府下,腐败虽不能彻底杜绝,但却得到了有效的防治。有限政府下的腐败,不是来自于制度性的缺陷,而是来自人性中恶的潜能和贪欲的偶然流露。在有限政府下,由于政治权力受到有效的限制和监督,虽时有腐败现象发生,但其在性质和规模上与无限政府下的腐败迥异,且通常能得到有效处置,因为有限政府的制度中存在著遏制、惩处腐败的纠错机制。政府受的限制越少,腐败的规模就越大,性质也越恶劣。

    腐败是一种特殊性质的犯罪,一种以政府权力为依托的犯罪,是有权者的专利。古今中外,从未听说过有乞丐被判有腐败罪。腐败与权力的占有量成正比。换句话说,权力越大,越不受限制,腐败的可能性越大,腐败所造成危害的后果也越大。从所曝光的腐败案件来看,腐败无一不与滥用公共权力有关。政府对经济的任意干预,政治权力的高度集中,政府直接拥有和经营大量的财富不可避免地要带来经济上、进而是政治上的的腐败。

    另一方面,权力又是联结人类社会的纽带。没有权力,人类的社会就有可能解体,因而,我们不能靠取消权力来消除腐败。消除腐败的方法有两种:一种是靠道德自觉,即或靠掌权者的道德自觉来防止腐败,靠掌权者的洁身自好来廉洁自律、以身作则、率先垂范;或靠对掌权者提倡廉洁来反对腐败。这无异是寄希望于可遇而不可求之人、之事。若以此作为防止腐败的主要手段,腐败不仅不可能得到有效地防止,反而可能更加泛滥。因为良心在与私欲的每一次较量中并不总能占上风。当良心必输的时候,若没有外在的手段来制止这种局面,那么我们所得到的只能是遍地的腐败。所以,我们不能指望有权腐败的人用自己的权力来消灭自己的腐败,就象我们不能指望一个正常的人用他自己的右手去砍掉自己的左手一样。

    另一种防止腐败的方法是对权力加以制度的约束,即消灭腐败只能借助有效的权力,以一种权力约束另一种权力,并把这种以权力约束权力的作法用制度固定下来。用制度的手段来规定权力的用途,防止权力被滥用,以避免腐败,这是被历史证明的唯一有效的办法。这样才能确保掌权者的私欲永远占不了上风,或在稍占上风之后,立即得到有效的制止。所以,在我国目前最应实施的办法就是加强对公共权力的制度监督,尤其是要加强各级人大对各级政府及其官员行为的监督,其中特别重要的是对各级政府的财政收入和支出的监督。可以想象,若是北京市人大对陈希同王宝森的权力稍有节制,那么他们二人作歹的时间就不会如此之久,挥霍鲸吞的公款也不致如此之巨。从目前对反腐败的讨论来看,这种制度的反腐方法目前似乎并未受到应有的重视。以此看来,我们有必要加强人民代表大会对各级政府的监督权,把超越法律之上的权力变成在法律监控之下的权力,让各级人大切切实实地行使调查权、质询权、听证权和弹劾权,尤其是财政监督权。用外在的权力制止政府官员的腐败行为,把道德自觉、倡导廉洁当作辅助性反腐手段。甚至有必要考虑让纪检部门退出对腐败案件的调查,实行党纪与国法的分离,以确保司法部门在惩治腐败上的独立性、权威性和有效性,进行相应的政治体制改革,变无限政府为有限政府,这才是制止腐败的根本之道。

    七、选拔社会到选举社会

    《联邦党人文集》的作者之一汉密尔顿这样道出了有限政府的难度:构建政府的最大难处在于你必须先使得政府能够管好被统治者,然后再使得政府能够管好自身。历史上的政府在对自身的限制上往往半途而非,节节退让,对被统治者严加管制、对统治者自身放任自流。政府官员在什么条件下会尊重对其自身行为的限制?所有的公民都认识到要对政府的行动范围作适当的限制。每个公民都有能力区分以下两个相互排斥的范畴:合法的政府行为与越限的政府行为。当然,在一个社会中,个人有能力做到这两点是一回事,整个社会能否做到这两点又是一回事。如果我们把一个社会中的统治者看作一个整体,把所有的公民看作另一个整体,那么,公民支持统治者的条件就是统治者不会逾越公民所认定的行动范围,不会侵犯属于公民自己的权利。只有做到这两点,公民才会支持统治者继续掌权。

    有限政府不仅使社会上的每个民众受益,也会使政府及其官员受益。在有限政府的条件下,政府不逾越法定的行动范围,不侵害公民的基本权利和自由,这成了政府及其官员的自身利益所在。一旦做不到上述两点,其自身利益就会受到侵害,会使他们面临失去权力的危险。所以,政府的自身利益将导致政府官员遵守对其行动的限制。但是,如果公民内部对政府的行动范围形不成一致的看法,并且不准备捍卫公民与国家之间的界限,捍卫自己的权利和自由,那么,统治者就可以逾越权限,践踏自由,而同时仍然继续掌权,这就像我们在中国历史上常常见到的那样。所以,限政的实现需要在社会中达成某种协调和共识,这个共识包括,划定政府与公民之间的边界,并捍卫个人的权利与自由。在近代,这种共识通常是与某种革命联系起来的,如英国光荣革命、美国的独立战争等,这些革命的成功标志是就政府的行动范围和公民的权利达成一个全社会性的基本共识。并以宪法和法律的形式规定下来。经历了这两场革命,不逾越权限与尊重公民的自由就成了政府的根本利益所在。由是观之,与以市场社会兴起相关的近现代革命,其成功的标志就是能否实现与市场经济相配套的有限政府。实现有限政府的时间越短,手段越温和,革命的代价就越小,也就越成功。而维持有限政府的真正难度在于,即使公民从政府的越权中受益,也要坚决抵制政府的越权行为。也许眼前代价昂贵,但将使他们长久受益。这显然是政治的大智慧。要不然,浅尝眼前的甜头,随之不得不饱食无穷的苦果。 有限政府的巨大优越性还表现在无限政府与有限政府在秩序构建方式上的根本差异。我把这种差异概括为选拔社会与选举社会的差异。选拔与选举是中国人所十分熟悉的政治“字眼”。表面上,它们所涉及的只是各级领导和官员的产生方式。但从政治学的角度看,实质上,它们却代表著两种根本不同的政治秩序构建方式和两种性质迥异的政体形式。

    选拔所代表的无限政府下的秩序构建方式是:权力的流动方向是单线的,是由上至下的,掌权者是由上一级对下一级选拔(俯身拔)出来的。试看中国的王朝政权,开国者们用暴力打下江山,权力的逻辑是打江山者坐江山,最高权力的继承人是由前任(如始皇帝、太祖等)选拔、并指定的(如儿皇帝、甚至皇侄子)。靠通过这种由上至下的选拔方式构建秩序的社会便是选拔社会。选拔社会的秩序基础是暴力(取得政权,强制维持政权)。选拔社会与无限政府是孪生子,在选拔社会中的无限政府的统治之下,最高的权力不受被统治者制约,不实行开放的公平竞争,下级只对上级负责,而不对被管辖对象、被统治对象负责。做官的“诀窍”是讨得上级首长与领导的“欢心”。如民间的顺口溜所刻划的“选拔哲学”:能喝半斤的喝一斤,这样的干部要进京;能喝五两的喝两口,这样的干部要调走。由于选拔者握有不受下级限制的特权,就难免孳生跑官、要官、买官卖官的丑恶行径,以致官职的“购销”成为有“明码标价”的产业化行为。

    选拔型社会是由计划和命令调控的、按照国家意志、由上至下组织起来的、以官僚为主导的社会。在这样的社会中,权力无约束,民权无保障。全面的选拔所造就的往往是一个权力不受民众和法律约束的无限政府。社会政治生活是广播体操。一切生活的律令是一切行动听指挥、步调一致才能得胜利,连一切建设都以打战役的战争方式进行,民众被当作士兵与“孩童”,一切唯长官与“家长”的马首是瞻,个人的自主性、能动性无从发挥。因而,没有市场经济、民主政治和个人自由的发展空间。

    相比之下,有限政府下的秩序构建方式是:权力是由下至上,逐级授予的,掌权者是由下至上选举(选出来,举上去)的。在有限政府取代无限政府的过程中,在选举方式取代选拔方式的过程中,难免会借助革命的手段,难免会使用暴力,但是打天下与坐天下并无必然的联系。除非以选举的方式、经由下至上的自愿同意,打天下者才能坐天下,并在适当的时候,由新选举出来的掌权者取而代之。即便打天下者经由选举坐上江山。他们也必须承诺对选举他们的人负责,并尊重、保护每个公民的生命权、自由权和追求幸福权。丘吉尔在领导英国人民打赢二次大战后却被选民换下台,这是选举社会的一个生动事例,也是在选拔社会中所不能想象的。

    在当今的选举社会中,秩序的基础不是野蛮的暴力,而是公民以选举这种文明的方式表达的自愿同意,维持秩序的手段是尊重和保障民权前提下的法治(而非申子、韩非子式的依法而治,更非无法无天的人治)。按照选举来构建政权必定会为造就一个权力受到选民和法律有效约束的有限政府创造有利条件。在有限政府下,最高权力和各级权力都受到限制、约束和监督,各级权力向自由竞争的选举开放,且对选民负责。由于政府受限制,民权有保障,加上稳定有效的法律,高度的经济自由,市场社会的发育也就具备了肥沃的政治和法律土壤。

    在目前的中国,选举与选拔并存,市场因素与非市场因素共处,财产权与经济自由在现实生活中普遍存在,但仍有很大的限制,在宪法和法律上,尚未得到明确的承认和有效的保障。选举在政治生活的必要作用还受到极大的限制,选举往往被不相干的部门所包办代替,下级办选举往往是为了完成下级布置下来的任务,选民的选举权难以落实,选举的积极性无法发挥。另一方面,从日益活跃的村民自治选举和要求乡级和县级政府直选乃至全面普选的呼声中不难窥到,中国目前正处在由无限政府向有限政府、选拔社会向选举社会的过渡之中。从选拔到选举的转变,兹事体大,关系到市场经济在中国能否成功,关系到能否实现由无限政府向有限政府的转变,关系到中国能否有一个建立在充分个人自由之上的自由民主的未来。

    (市场经济与有限政府 全文完)

  • 棒棒医生:循证的崩溃

    • 作者:棒棒医生

    循证医学在中国本来就虚弱得可怜,在暴虐的新冠病毒面前,已经濒于全面崩溃。

    临床决策必须建立在当前最佳证据的基础上,这一原则被“萨妹”无情地蹂躏和唾弃。

    阿比朵尔和达芦那韦,仅仅做过体外细胞实验,就敢于宣称对新冠肺炎有效,甚至是“克星”,直接在临床广泛使用,某院士还呼吁要把它纳入国家卫健委第六版方案中去。须知,体外细胞实验到可以临床应用中间还隔着动物实验、一期二期和三期临床试验的十万八千里,这个漫长的过程会淘汰至少99%的所谓“有效”。如果体外实验有效就算有效的话,那么,一夜之间发明一万种有效药物有何难哉?

    奥司他韦,本是治疗流感的“特效”药物,它的效果也不过是起病24小时内服用可以缩短病程减轻症状(不超过40%)而已。关键是,这个药是针对流感病毒神经络氨酸酶立体结构而在分子水平进行精准设计的,它怎么可能会对新冠病毒也有效呢?但是,武汉前线国内顶级医院大力应用后,已经在基层全面开花,即使国家方案不推荐也无济于事。

    抗菌药物对病毒性肺炎的治疗无效是绝对的国际共识和医学常识,五个版本的国家方案里也一再强调要“避免盲目和不恰当使用”,但是,怎敌得住顶级医院的先锋示范呢?现在的基层医院,早已不仅仅用于重型危重型合并细菌感染者,而是同时用于几乎所有的轻型和普通型,名之曰“预防”。国家开展“抗菌药物专项整治”活动“十年辛苦不寻常”的成果,在这次疫情中被碾压得体无完肤。

    大剂量维生素C抗自由基,这一疗法据说来自美国一位华裔专家。然而,这个专家很快就被挖出专业和病毒以及传染病没有关系,发表的几十篇论文不但和病毒无关,连一作和通讯作者都不是,这样的人说的话不但在大众中疯传,专业医生们也狐疑不定或者坚信不疑地直接临床试用了。没有任何临床证据和理论依据的疗法可以凭着传闻就直接大量用于临床,循证精神荡然无存。

    康复患者血浆疗法是最新的“特效疗法”,已经由官方正式推荐应用。但是,它仅仅来自武汉区区10例重症病人的观察,没有对照,没有入组的标准说明,也没有可信的终点指标,这种“疗效”在循证医学里连最低级别的证据都算不上。如果搜索以往的证据则可以看到,在埃博拉和流感等疾病的多个国际大型研究中,血浆疗法早已经被否定。而理论上,血浆疗法如果有效,是基于康复者血液中的抗体,是特异作用于病毒的,那么,只有早期轻型时应用才会有效果。等到危重时,病毒已经不是问题,抗体对付不了严重的炎症反应。此外,血液的安全性和可及性也很难保证。这一种既往被证明无效的安全风险高的疗法首先需要进行严谨设计的临床研究,确保受试者的安全,然后才能宣称“有效”,然后才能推荐用于临床。不幸,所有的流程都被“特事特办”了。

    纷纷你方唱罢我登场,我只看到一个药还在坚持着循证的信念,那就是瑞德西韦。这个药在国外个案已经显示了“特效”,之前也通过了体外实验、动物实验、一期和二期临床试验,证明是安全的,但它仍然不敢宣称对新冠肺炎是“有效”的,非要等到四月份揭盲以后才敢下结论。它为什么不敢?因为这是现代药物不可逾越的雷池!如果可以随意逾越的话,现代医学的大厦瞬间就崩溃了!

    当然,更多的中药,1号2号直到N号,需另当别论,它们过于博大精深,浅薄的循证对它们是没有约束力的。

    继续崩溃到哪里才是尽头呢?我不知道,我希望至少在悬崖的边上能止住。

  • Free SSL Cert from Let’s Encrypt! It’s REALLY FRAGRANT!!

    Traefik Docker Compose Example:

    version: '3.7'
    networks:
      livedignet:
        external: true
    services:
      traefik:
        image: "traefik:2.1"
        container_name: "traefik"
        networks:
          - livedignet
        command:
        # - "--log.level=DEBUG"
          - "--api.insecure=true"
          - "--providers.docker=true"
          - "--providers.docker.exposedbydefault=false"
          - "--entrypoints.web.address=:80"
          - "--entrypoints.websecure.address=:443"
          - "--certificatesresolvers.ldhttpchallenge.acme.httpchallenge=true"
          - "--certificatesresolvers.ldhttpchallenge.acme.httpchallenge.entrypoint=web"
        # When u are on test stage. UnComment the line below.
        # - "--certificatesresolvers.ldhttpchallenge.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
          - "--certificatesresolvers.ldhttpchallenge.acme.email=your@email.com"
          - "--certificatesresolvers.ldhttpchallenge.acme.storage=/letsencrypt/acme.json"
        ports:
          - "80:80/tcp"
          - "443:443/tcp"
          - "8080:8080/tcp"
        volumes:
          - type: bind
            source: "./letsencrypt"
            target: "/letsencrypt"
          - type: bind
            source: "/var/run/docker.sock"
            target: "/var/run/docker.sock"

    Web Application Example:

    version: '3.7'
    networks:
      livedignet:
        external: true
    services:
      livedig:
        image: 'wordpress:latest'
        container_name: "livedig"
        networks:
          - livedignet
        external_links:
          - mysql
        environment:
          WORDPRESS_DB_HOST:      'mysql:3306'
          WORDPRESS_DB_USER:      'mysql_usrname'
          WORDPRESS_DB_PASSWORD:  'mysql_password'
          WORDPRESS_DB_NAME:      'mysql_dbname'
          WORDPRESS_TABLE_PREFIX: 'wp_'
        working_dir: '/var/www/html'
        labels:
          - "traefik.enable=true"
    
          - "traefik.http.routers.livedig_http.rule=Host(`livedig.com`)"
          - "traefik.http.routers.livedig_http.entrypoints=web"
          - "traefik.http.routers.livedig_http.middlewares=redirect-to-https"
          - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
    
          - "traefik.http.routers.livedig.rule=Host(`livedig.com`)"
          - "traefik.http.routers.livedig.entrypoints=websecure"
          - "traefik.http.routers.livedig.tls.certresolver=ldhttpchallenge"
        ports:
          - '80'
        volumes:
          - type: bind
            source: ./wp-content
            target: /var/www/html/wp-content
            read_only: false
  • ClickHouse Mutation

    在 ClickHouse 中,ALTER UPDATE/DELETE 等,被称为 Mutation。

    一、Mutation 异步执行注意事项

    Mutation 是异步执行的,所以如果有后续任何类型的 Query,无论是 INSERTSELECTALTER等,如果这些 Query 的条件对 Mutation 的结果有依赖,那么都应该等待 Mutation 完全结束之后再操作。

    确认 Mutation 是否完成,可以通过查询 system.mutations表中是否有相关的"is_done=0"记录来完成。

    检测是否有未完成的 Mutations:

    SELECT COUNT() FROM `system`.mutations
    WHERE `database`='${db_name}' AND `table`='${tbl_name}' AND is_done=0;
    

    二、删除挂起的 Mutation

    某同学曾经在 ALTER UPDATE中错误地赋值,将NULL赋给不可为NULL的字段,从而使 Mutation 无法正确执行,然后就一直挂在系统里,而且不断报错。

    2019.09.05 10:46:11.450867 [ 9 ] {} <Error> db_name.tbl_name: DB::StorageReplicatedMergeTree::queueTask()::<lambda(DB::StorageReplicatedMergeTree::LogEntryPtr&)>: Code: 349, e.displayText() = DB::Exception: Cannot convert NULL value to non-Nullable type, Stack trace:
    

    此时便需要将挂起的 Mutation 清理掉。

    首先,通过

    SELECT * FROM `system`.mutations
    WHERE `database`='${db_name}' AND `table`='${tbl_name}' AND is_done=0;
    

    查得与挂起 Mutation 相关记录的 mutation_id字段值等相关信息。然后进行清理。

    清理有两种手法:

    1. 系统自带清理

    语法:

    KILL MUTATION [ON CLUSTER cluster]
      WHERE <where expression to SELECT FROM system.mutations query>
      [TEST]
      [FORMAT format]
    

    例子:

    -- 取消并移除某单表的所有 Mutations:
    KILL MUTATION WHERE database = '${db_name}' AND table = '${tbl_name}'
    
    -- 取消某特定的 Mutation:
    KILL MUTATION WHERE database = '${db_name}' AND table = '${tbl_name}' AND mutation_id = '${mutation_id}'
    

    官方文档参考:KILL MUTATION

    2. 手工清理

    有两种 Case,一种是复制表,一种是非复制表。

    2.1 对于复制表,处理 ZooKeeper 中相应的 ZNode 即可。

    在 ZooKeeper 中找到znode /${path_to_table}/mutations/${mutation_id},将其删除。

    2.2 对于非复制表

    先将表卸载:

    DETACH TABLE `${tbl_name}`;
    

    ${clickhouse_data_dir}/${db_name}/${tblname}/ 目录中,删除 mutation${mutation_id}.txt 文件。

    重新装载表:

    ATTACH TABLE `${tbl_name}`;
    
  • Break THE WALL

    Break THE WALL (by Apple App Store) to get updates of the break tools …

    Shadowrocket